由于开发中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<Fragment> 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(); }
最后可以完美更新数据源了