最近在项目中用到ViewPager+FragmentPagerAdapter的方式来做界面,其中当adapter的数据源数据更新时,调用adapter.notifyDataSetChanged()更新数据,发现ViewPager并没有更新,还是原来的数据。
参考了别人的文章以及部分解决的的方法,加上自己的理解,拿出了下面这套解决方案。
解决方案
在数据源更新的前面加入以下代码
if (viewPager.getAdapter() != null) {
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
List fragments = fm.getFragments();
if(fragments != null && fragments.size() >0){
for (int i = 0; i < fragments.size(); i++) {
ft.remove(fragments.get(i));
}
}
ft.commit();}
在你的adapter类中加入以下代码
private int mChildCount = 0;
@Overridepublic void notifyDataSetChanged() {
// 重写这个方法,取到子Fragment的数量,用于下面的判断,以执行多少次刷新
mChildCount = getCount();
super.notifyDataSetChanged();
}
@Override
public int getItemPosition(Object object) {
if ( mChildCount > 0) {
// 这里利用判断执行若干次不缓存,刷新
mChildCount --;
// 返回这个是强制ViewPager不缓存,每次滑动都刷新视图
return POSITION_NONE;
}
// 这个则