gpt4 book ai didi

android - recreate() Activity 时未销毁 fragment

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:17:10 27 4
gpt4 key购买 nike

我有一个支持库 fragment ,它发送网络调用,并在收到特定网络响应时 recreate() 父 Activity 。我可以看到 Activity 确实得到了重新创建,因为我可以看到调用了 onCreate()onDestroy()

但是在重新创建 Activity 之后, fragment 仍然存在并且卡在一个不断重新创建和制作新 fragment 的循环中。

这是 Activity 的 onCreate() 的一部分:

    if (someLogic()) {
fragmentA = new FragmentA();
FragmentUtil.addFragment(getSupportFragmentManager(), fragmentA);
} else {
fragmentB = new FragmentB();
FragmentUtil.addFragment(getSupportFragmentManager(), fragmentB);
}

FragmentA 是执行网络调用的 fragment ,FragmentB 是应该在 recreate() 之后显示的 fragment 。当我使用 getSupportFragmentManager().getFragments() 检查 fragment 列表时,我看到 1 个 FragmentA 实例和 16 个 FragmentB 实例。

我的问题是为什么会发生这种情况,我该如何解决?

最佳答案

调用 recreate() 本质上会导致 Activity 经历配置更改。配置更改会导致 Activity 及其 Fragment 被销毁并重新创建。因此,当发生这种情况时,您的 Fragment 实际上应该被销毁(您可以通过在 fragment 的 onDestroy 方法中添加 Log 消息来亲自查看) .

配置更改导致 fragment 被销毁和创建的事实并不意味着 FragmentManager 将简单地忘记曾经存在的 fragment 。配置更改发生后,FragmentManager 仍将保留对新创建的 fragment 的引用。

要防止创建多个 fragment ,您可以做的一件事是在 Activity 的 onCreate() 中执行类似的操作:

if (savedInstanceState == null) {
// The Activity is being created for the first time, so create and
// add new fragments.
} else {
// Otherwise, the activity is coming back after being destroyed.
// The FragmentManager will restore the old Fragments so we don't
// need to create any new ones here.
}

关于android - recreate() Activity 时未销毁 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26849905/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com