美文网首页
ViewPager用FragmentPagerAdapter做适

ViewPager用FragmentPagerAdapter做适

作者: 雨田Android开发 | 来源:发表于2020-10-19 10:26 被阅读0次

    方法一:已经可以从删除的地方回传删除的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()

    相关文章

      网友评论

          本文标题:ViewPager用FragmentPagerAdapter做适

          本文链接:https://www.haomeiwen.com/subject/tqkkmktx.html