ViewPager 不显示正确的页面

ViewPager does not show correct page

我有一个 viewPager 并在其中添加片段。 起初我有 4 个片段,显示最后一个。 5, 6, 7 ,8 当我到达第一个片段时。我进行了 Api 调用,获取另外 4 个早期片段的数据:1,2, 3, 4。我将最后一个设置为可见。 我的问题是通过它们。我得到这个:8、7、6、5、8、7、6、5。 如果我退出并重新进入片段,它工作正常。但总是第一次,它似乎以某种方式缓存了其他片段?

这就是我创建片段的方式:

 private List<PSActivityFragment> getFragments(){
    UserRecord profile = UserRecord.getMyUser(PSProfileActivity.this);
    CrudStateCallback crudStateCallback = new CrudStateCallback() {
        @Override
        public void onResponse(String string) {
        }
    };
    List<PSActivityFragment> fList = new ArrayList<PSActivityFragment>();
    if(profile != null) {
        loader.setVisibility(View.GONE);
        if(profile.getMonths().size() > 0) {
            for (PSUserActivityMonth month : profile.getMonths()){
                Log.i("","month is fragments created are:" + month);
                PSActivityFragment psaf1 = new PSActivityFragment();
                psaf1.init(month, crudStateCallback);
                fList.add(psaf1);
            }
        }
    }else{
        loader.setVisibility(View.VISIBLE);
    }
    return fList;

}

每次我得到新的数据。我重新创建适配器:

  pager.removeAllViews();
    pager = null;
    pager = (ViewPager) findViewById(R.id.viewpager);
    final List<PSActivityFragment> fragments = getFragments();
    myPagerAdapter = new MyPageAdapter(getSupportFragmentManager(), fragments);
    pager.setAdapter(myPagerAdapter);

我尝试重新创建和设置适配器,而不是再次将片段设置到适配器,然后调用 notifyDataSetChanged。但是,我仍然遇到同样的问题。片段是否缓存在某处?为什么会这样? 我检查了日志,片段是按正常顺序创建的:

 06-02 14:16:21.514: I/(14192): month is fragments created are:PSUserActivityMonth{category='u/23', month=11, year=2015, weeks=1}
 06-02 14:16:21.515: I/(14192): month is fragments created are:PSUserActivityMonth{category='u/23', month=12, year=2015, weeks=5}
 06-02 14:16:21.515: I/(14192): month is fragments created are:PSUserActivityMonth{category='u/23', month=1, year=2016, weeks=5}
 06-02 14:16:21.515: I/(14192): month is fragments created are:PSUserActivityMonth{category='u/23', month=2, year=2016, weeks=5}
 06-02 14:16:21.515: I/(14192): month is fragments created are:PSUserActivityMonth{category='u/23', month=3, year=2016, weeks=5}
 06-02 14:16:21.516: I/(14192): month is fragments created are:PSUserActivityMonth{category='u/23', month=4, year=2016, weeks=5}
 06-02 14:16:21.516: I/(14192): month is fragments created are:PSUserActivityMonth{category='u/23', month=5, year=2016, weeks=6}
 06-02 14:16:21.516: I/(14192): month is fragments created are:PSUserActivityMonth{category='u/23', month=6, year=2016, weeks=1}

这些是几个月:我应该在循环浏览寻呼机后看到: 6月16日、5月16日、4月16日、3月16日(首先),然后是2月16日、1月16日、12月15日、11月15日。 相反,我看到:6 月 16 日、5 月 16 日、4 月 16 日、3 月 16 日(首先),然后是 6 月 16 日、5 月 16 日、4 月 16 日、3 月 16 日

适配器代码:

public class MyPageAdapter extends FragmentPagerAdapter {

private List<PSActivityFragment> fragments;


public MyPageAdapter(FragmentManager fm, List<PSActivityFragment> fragments) {
    super(fm);
    this.fragments = fragments;
}

@Override

public Fragment getItem(int position) {
    return this.fragments.get(position);
}


@Override

public int getCount() {
    return this.fragments.size();
}

}

PS:我的 activity 扩展了 fragmentActivity,我可能会使用 getSupportFragmentManager,正如您在创建适配器时看到的那样。这可能是问题所在吗?

将 Activity 与 FragmentActivity 和 getSupportFragmentManager 结合使用。我认为这可能是问题所在,所以我这样做了:

 if(getSupportFragmentManager() != null && getSupportFragmentManager().getFragments() != null){
        getSupportFragmentManager().getFragments().clear();
    }

现在可以使用了!!!