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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liuwan1992/article/details/79095891

在前文 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);
    }

猜你喜欢

转载自blog.csdn.net/liuwan1992/article/details/79095891