ViewPager用FragmentPagerAdapter做適配器動(dòng)態(tài)刪除指定頁(yè)面記錄

方法一:已經(jīng)可以從刪除的地方回傳刪除的Fragment在List中的位置,所以更新適配器中的List,remove掉刪除的。然后刪除ViewPager緩存中對(duì)應(yīng)的Fragment。再notifyDataSetChanged()

 List<Fragment> fragments = fm.getFragments();
  FragmentTransaction transaction = fm.beginTransaction();
 // mDeleteCityArry是刪除的Fragment的位置的數(shù)組
  for (int i = 0; i < mDeleteCityArry.length; i++) {
  mFragmentList.remove(mDeleteCityArry[i]);
   //刪除相應(yīng)的緩存碎片。
  transaction.remove(fragments.get(mDeleteCityArry[i]));
  transaction.commit();
  //重新設(shè)置適配器中的List
  mAdapter.setList(mFragmentList);
  mAdapter.notifyDataSetChanged();
}

方法二:其實(shí)和方法一類似,但是是刪除所有ViewPager中緩存的Fragment。再刪除mFragmentList中的所有內(nèi)容,全部重建Fragment,重新設(shè)置適配器中的List。一了百了。

List<Fragment> fragments = fm.getFragments();
  FragmentTransaction transaction = fm.beginTransaction();
   //把所有緩存碎片都刪了。
  for (Fragment childFragment : fm.getFragments()) {
            transaction.remove(childFragment);
            
   }
transaction.commit();
        //再全部重新創(chuàng)建。
   mFragmentList.clear();
   for (int i = 0; i < forecastSize; i++) {
            mFragmentList.add(OutterFragment.newInstance(mForecasts.get(i).getCity()));
        }
    //重新設(shè)置適配器中的List    
   mAdapter.setList(mFragmentList);
   mAdapter.notifyDataSetChanged();     

注意如果修改完可能會(huì)報(bào)錯(cuò)
Can not perform this action after onSaveInstanceState
解決辦法就是把commit()方法替換成 commitAllowingStateLoss()

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容