新建 fragment 对象但是不执行生命周期问题

今天发现一个问题,起因是某个 View 因为一些基础逻辑需要创建两次,所以会有两次初始化 fragment,每次初始化过后需要把 fragmentList 与 supportFragmentManager 绑定。因为该 view 被创建两次,所以一个 fragment 对象会初始化两次,第二次 new fragment 对象的时候,因为当前 activity 中的 supportFragmentManager 已经持有上一次初始化 fragment 对象的引用,也就是缓存,所以第二次 new fragment 就不会再去回调 fragment 的生命周期函数,这就导致 fragment 里面的对象都为 null。

解决方法就是把该 activity 中的 supportFragmentManager 持有的 fragmentList 缓存清空。

List 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() 并不能即时清理缓存,所以之前的缓存依旧还会存在。

你可能感兴趣的:(新建 fragment 对象但是不执行生命周期问题)