ViewPager用FragmentPagerAdapter做适配器动态删除指定页面记录

方法一:已经可以从删除的地方回传删除的Fragment在List中的位置,所以更新适配器中的List,remove掉删除的。然后删除ViewPager缓存中对应的Fragment。再notifyDataSetChanged()

 List<Fragment> fragments = fm.getFragments();
  FragmentTransaction transaction = fm.beginTransaction();
 // mDeleteCityArry是删除的Fragment的位置的数组
  for (int i = 0; i < mDeleteCityArry.length; i++) {
  mFragmentList.remove(mDeleteCityArry[i]);
   //删除相应的缓存碎片。
  transaction.remove(fragments.get(mDeleteCityArry[i]));
  transaction.commit();
  //重新设置适配器中的List
  mAdapter.setList(mFragmentList);
  mAdapter.notifyDataSetChanged();
}

方法二:其实和方法一类似,但是是删除所有ViewPager中缓存的Fragment。再删除mFragmentList中的所有内容,全部重建Fragment,重新设置适配器中的List。一了百了。

List<Fragment> fragments = fm.getFragments();
  FragmentTransaction transaction = fm.beginTransaction();
   //把所有缓存碎片都删了。
  for (Fragment childFragment : fm.getFragments()) {
            transaction.remove(childFragment);
            
   }
transaction.commit();
        //再全部重新创建。
   mFragmentList.clear();
   for (int i = 0; i < forecastSize; i++) {
            mFragmentList.add(OutterFragment.newInstance(mForecasts.get(i).getCity()));
        }
    //重新设置适配器中的List    
   mAdapter.setList(mFragmentList);
   mAdapter.notifyDataSetChanged();     

注意如果修改完可能会报错
Can not perform this action after onSaveInstanceState
解决办法就是把commit()方法替换成 commitAllowingStateLoss()

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容