今天發(fā)現一個問題此虑,起因是某個 View 因為一些基礎邏輯需要創(chuàng)建兩次憎妙,所以會有兩次初始化 fragment库正,每次初始化過后需要把 fragmentList 與 supportFragmentManager 綁定。因為該 view 被創(chuàng)建兩次厘唾,所以一個 fragment 對象會初始化兩次褥符,第二次 new fragment 對象的時候,因為當前 activity 中的 supportFragmentManager 已經持有上一次初始化 fragment 對象的引用抚垃,也就是緩存喷楣,所以第二次 new fragment 就不會再去回調 fragment 的生命周期函數,這就導致 fragment 里面的對象都為 null鹤树。
解決方法就是把該 activity 中的 supportFragmentManager 持有的 fragmentList 緩存清空铣焊。
List<Fragment> fragmentList = getSupportFragmentManager().getFragments();
boolean cache = fragmentList != null && fragmentList.size() > 0;
// 先清理緩存
if (cache){
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
for (Fragment fragment:fragmentList){
fragmentTransaction.remove(fragment);
}
fragmentTransaction.commitNow();
}
在初始化 fragment 之前加入這段代碼,確保 supportFragmentManager 中沒有緩存罕伯。然后再往里添加 fragment曲伊。
這里開啟 fragmentTransaction 之后的提交一定要用 commitNow(),用 commit() 并不能即時清理緩存追他,所以之前的緩存依舊還會存在坟募。