方法一:已經(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()