gpt4 book ai didi

android - FragmentManager popBackStack 不删除 fragment

转载 作者:可可西里 更新时间:2023-11-01 19:10:06 25 4
gpt4 key购买 nike

我正在使用 fragment 实现菜单导航。所以我从主页开始,然后用户可以导航到不同的部分和每个部分的详细信息。

当用户更改部分时,我会在 fragmentmanager backstack 上调用 pop 直到到达主页,然后加载新部分。

这一切都按预期工作。但是我遇到了这个问题:

  1. 加载一个在 onResume() 上调用 setHasOptionsMenu(true) 的部分
  2. 加载另一个部分(它应该从堆栈中取出的旧部分)。我看还行。没有显示菜单
  3. 离开应用程序(例如,转到 Android Laucher Activity ),然后当我返回时,我看到了正确的部分,但它显示的是旧 Fragment 的菜单。

我已经迭代了后台堆栈并打印了每个 fragment ,但它不是带有菜单的 fragment 。

我在 onResume() 方法上放置了一个调试标记(标记了 setHasOptionsMenu(true) )并且它确实进入了这里,所以 Fragment 它仍然在某处。

我想知道我是否做错了什么,我该如何解决,thx

更新:

我正在使用这段代码加载新 fragment

fm.beginTransaction()
.add(container, sectionFragment.getFragment())
.addToBackStack(sectionFragment.getFragmentName())
.commit();

对于删除:

private void clearStack(){
int count = fm.getBackStackEntryCount();
while(count > 1){
fm.popBackStack();
count--;
}
}

注意 1: 我正在使用添加而不是替换,因为我不想在从详细信息部分返回时丢失 fragment 的状态。当我加载另一个不同的部分时,我调用 clearStack 将堆栈弹出到 1,然后加载新 fragment 。最后,我调用 executePendingTransactions() 以完成从事务中删除 fragment 。

注意 2: 我看到它正在进入我的 fragment onDestroy() 方法,因此它应该被销毁。但是我不知道为什么当主要 Activity 恢复时它会再次被调用。

最佳答案

我发现问题不在添加和删除堆栈 fragment 的逻辑上。

问题是一些 fragment 在其中加载了另一个 fragment (它有 ViewPager 组件)。然后我认为当 fragment 被移除时,这些 fragment 也被移除。

仅当您使用 getChildFragmentManager() 方法时才会出现这种情况。在其他 fragment 中加载 fragment 时必须使用此方法。如果不是,则 fragment 与 fragment Activity 相关联。

关于android - FragmentManager popBackStack 不删除 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23499198/

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