由于开发中ViewPager的Adapter数据是通过网络获取,并且会动态更改,这个时候以为像Listview一样用
Adapter.notifyDataSetChanged()来更新数据,发现viewpager对应的Fragment没有任何变化,
于是上网查询资料,得出是viewPager的缓存导致,后面得到一段处理方法
if (vp_pager.getAdapter() != null) {
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
Bundle bundle = new Bundle();
int index = vp_pager.getAdapter().getCount();
String key = "index";
for (int i = 0; i < index; i++) {
bundle.putInt(key, i);
ft.remove(fm.getFragment(bundle, key));
}
ft.commit();
}
结果可以及时更新,但是有另外一个问题,多切换数据就出现了
[android-developers] java.lang.IllegalStateException: Fragement no longer exists for key f1: index 3
错误,经过研究后,自己重新更改了写法
if (vp_pager.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));
}
}
// Bundle bundle = new Bundle();
// int index = vp_pager.getAdapter().getCount();
// String key = "index";
// for (int i = 0; i < index; i++) {
// bundle.putInt(key, i);
// ft.remove(fm.getFragment(bundle, key));
// }
ft.commit();
}
最后可以完美更新数据源了