您的位置:首页 > 其它

更换ViewPager中的Adapter后Fragment不更新问题

2016-11-17 09:14 661 查看
由于开发中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

错误,经过研究后,自己重新更改了写法
[java] view plain copy            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();  
            }    

最后可以完美更新数据源了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: