gpt4 book ai didi

java - onResume 调用了 "dead" fragment - 如何正确恢复?

转载 作者:行者123 更新时间:2023-11-30 00:48:50 25 4
gpt4 key购买 nike

我使用支持库中的 fragment 开发了一个应用程序。我只使用一个 Activity 。该布局由一个带有折叠工具栏布局的协调器布局和一个导航 View 组成。选择导航项时,我在 NavigationItemSelectedListener 中执行以下操作:

switch (item.getItemId()) {
default:
return false;
case R.id.mainmenu_start:
navi.clear();
navi.navigate(new StartFragment(), R.id.fragment_container);
return true;
// ... More menu entries
}

因此,当选择一个新项目时,我会清除后台堆栈 (navi.clear()) 并用新 fragment 替换显示的 fragment 。

我遇到的问题是:“旧”(已替换) fragment 不会被删除/分离

因此,当我导航到 StartFragment,然后导航到另一个 fragment ,然后再次选择 StartFragment 时,onResume 被调用两次:
一次在“旧的”/第一个 StartFragment 上,一次在新创建的 StartFragment 上。

如何避免这种行为?我要么想重用现有 fragment (第一个 fragment )要么创建一个新 fragment - 但同时使用这两种 fragment 会导致大量问题...

为了研究这种行为,我给每个 fragment 一个唯一的(递增的)ID:导航到新 fragment 时,onResume 会在几个较旧的 fragment 上调用,但不会在所有 fragment 上调用。
例如:我总是选择相同的菜单条目进行导航。这是发生的“事件”,其中数字表示 fragment ID(所有 fragment 都是同一类(StartFragment)):

  1. 创建 1 个,恢复 1 个
  2. 创建 2,恢复 1,恢复 2
  3. 创建 3,恢复 1,恢复 3
  4. 创建 4、恢复 2、恢复 3、恢复 4

所以有时“旧” fragment 会丢失,稍后再回来。有时也会在完全不同的 fragment 上调用 ​​onResume。 (所以我之前打开Fragment 2的时候,在新建Fragment 1的时候也会调用Fragment 2上的onResume...)

为了完整性
导航功能:

public void clear() {
FragmentManager fragmentManager = ((MainActivity)context).getSupportFragmentManager();
fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
}



public void navigate(Fragment fragment, int container, HashMap<String, Pair<String, View>> sharedElements) {
this.hideKeyboard();
FragmentTransaction ft = ((MainActivity)context).getSupportFragmentManager().beginTransaction();
ft.replace(container, fragment);
ft.addToBackStack(null);
ft.commit();
((MainActivity)context).getDrawerLayout().closeDrawers();
}

最佳答案

作为答案发布以供将来引用。

我认为你的问题是 popBackStack()不会立即生效,但计划在下一次事件循环传递时运行,这在您的情况下为时已晚并且会产生不良影响。应该帮助的是强制 fragment 管理器事务立即完成。

可以通过调用 executePendingTransactions() 来实现。或者在这种特殊情况下 popBackStackImmediate()

关于java - onResume 调用了 "dead" fragment - 如何正确恢复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41383642/

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