ViewPager没有显示正确的页面

时间:2016-06-02 12:22:46

标签: android android-fragments caching android-viewpager adapter

我有一个viewPager,我在里面添加了片段。 起初我有4个片段,显示最后一个片段。 5,6,7,8 当我到达第一个片段。我进行Api调用,获取另外4个早期片段的数据:1,2,3,4。然后我将最后一个设置为vizible。 我的问题是通过他们。我明白了: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日(第一次),然后是16日,16日,15日,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:我的活动扩展了fragmentActivity,我可以使用getSupportFragmentManager,就像我在创建适配器时看到的那样。这可能是问题吗?

1 个答案:

答案 0 :(得分:0)

使用带FragmentActivity的Activity和getSupportFragmentManager。我认为这可能是问题所以我这样做了:

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

现在它有效!!!