Android 解决 Fragment 懒加载并嵌套使用时子 Fragment 的 View 不填充

在前文 Android ViewPager 中 Fragment 懒加载 中介绍了 Fragment 懒加载的实现,在后期项目运用中对 Fragment 中 View 的加载也实现了在首次展示时才进行填充,结果遇到了如下一个问题:

当 Fragment 被销毁重建时,其中嵌套的 Fragment 界面没有被展示,但是 isAdd() 结果为 true。

研究后发现,在 Fragment 中嵌套使用 Fragment 时,当父 Fragment 被销毁时,子 Fragment 不会被销毁。

我们平时加载 Fragment 时会通过 findFragmentByTag 进行复用,这便导致父 Fragment 重建时会根据保存的子 Fragment 的 TAG 去直接加载子 Fragment,而不是重建一个子 Fragment。此时子 Fragment 由于懒加载机制,它的 View 不会再次被填充到父 Fragment 中。也就是在重建后的父 Fragment 中,子 Fragment 会被 onAttach,但它的 View 不会被 add。

解决办法:在父 Fragment 的 savedInstanceState 中移除保存的子 Fragment 的 TAG 信息。

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        if (savedInstanceState != null) {
            /**
             * key 参考 {@link FragmentActivity.FRAGMENTS_TAG}
             */
            savedInstanceState.remove("android:support:fragments");
        }
        super.onCreate(savedInstanceState);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值