其實方法很簡單,只是一開始想復雜了,然后去StackOverflow上看到的各種答案就更迷糊了.
主要思維偏了就完了.
ViewPager里放的不管是Fragment還是Layout,這都是個Adapter容器.因此你要更改里面的東西,最正確的方法就是去修改Adapter里的數據.
替換步驟需要:
1. 刪除FragmentManager現有的當前頁面的Fragment.
我用的是mFm.beginTransaction().remove(mFm.findFragmentByTag("android:switcher:" + R.id.view_pager + ":" + position)).commit();因為看源碼你會發現添加的時候是用這個Tag去添加的.或許如果保存了個FragmentList也可以直接獲取.
2. 修改Adapter里的數據.
然后notifyDataSetChanged();
這里需要說一點,有些時候調用了notify也不會刷新,好像是緩存的原因.需要覆寫方法
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;//返回這個表示該對象已改變,需要刷新
return POSITION_UNCHANGED;//反之不刷新
}
然后替換了當然還需要做到按返回鍵返回上一個Fragment.
我的方法
1. Adapter里兩個List,里面都保存Fragment的類名.替換的時候把一個List里的數據修改
2. 在Activity的onBackPress()方法里調用Adapter自定義的backPress()方法,在該方法里去判斷兩個List的該position是否相同,不同則再操作一遍替換操作.相同則Activity退出.