【发布时间】:2026-01-06 01:45:01
【问题描述】:
由于未知原因,有时我的片段显示属于不同片段的菜单项。
我有一个带有自定义后退堆栈的活动,以使用以下方法维持正确的流程:
Map<Integer, List<Fragment>> fragmentStack = new HashMap<>();
这样每个“标签”都有自己的后台堆栈。 我在片段之间切换:
getSupportFragmentManager().beginTransaction()
.replace(R.id.container, fragment)
.commitNow();
片段在地图中维护,所以当切换到现有片段时,我使用它已经初始化的视图。
有时,当我从一个片段切换到第二个片段时,第二个片段会显示堆栈中先前创建的片段的菜单项,尽管在第二个片段上正确调用了 onCreateOptionsMenu。
如何克服这种不良行为?
导致此行为的操作:
1. 从第一个标签开始。映射在键 0 处初始化,List<fragment> 带有一个名为 A 的片段。然后显示该片段。 (片段 A 有菜单项)
2. 导航到第二个选项卡。映射在键 1 处初始化,List<fragment> 带有一个名为 B 的片段,显示此片段(替换片段 A)。片段 B 也有菜单项。
3. 导航回第一个选项卡。使用前一个片段 A,包括它已经初始化的视图(而不是膨胀一个新的)。
4. 单击带有导航到新片段 C 的内容,并停留在同一选项卡上。片段 C 被添加到片段列表中,在 Map 的键 0 下。片段 C 没有菜单项。
5. 导航到第二个选项卡。前一个片段 B 显示,但带有片段 A 的菜单项!
【问题讨论】:
-
你在 ViewPager 中使用 Fragment 吗?
-
@rupinderjeet 不,我使用的是底部导航视图
标签: android android-fragments menu menuitem