清除替换后由片段添加的工具栏菜单选项

Rob*_*uba 5 android android-menu android-fragments android-actionbar android-toolbar

我设置了3个“顶层”片段,每个片段都使用自己的子片段管理器来提供向下导航。这些顶级片段可以通过使用主要活动的支持片段管理器进行替换来切换。

这个顶级片段之一具有一个子片段,该子片段使用setHasOptionsMenu()和将菜单选项添加到工具栏/操作栏,onCreateOptionsMenu()并且效果很好。

现在我刚注意到的问题是:

添加新的子片段,并且隐藏带有菜单项的子片段(并将事务添加到顶级片段的后堆栈)时,菜单项消失。类似地,当通过撤消事务再次看到该片段时,菜单项将返回。这是期望的行为,似乎完全由Fragment框架处理。

但是,如果子片段可见(因此其菜单项出现在工具栏中),并且我切换了顶层片段,则菜单项仍保留在工具栏中

我本来希望菜单项被清除,因为不仅属于其的子片段已被转储,而且甚至其父片段(位于顶层片段中)也已被完全替换(甚至没有添加到后台,只是直接替换)。

invalidateOptionsMenu()认为只要传入的顶层片段已恢复,我就可以调用该活动,但是我觉得缺少一些东西来像在顶层片段中导航时那样自动处理。

pab*_*rca 7

在创建或重新创建每个片段之后,将调用onCreateOptionsMenu方法。您需要做的是在膨胀新菜单xml之前清除菜单。尝试这样做:

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState){
    super.onViewCreated(view, savedInstanceState);
    setHasOptionsMenu(true);
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater){
    super.onCreateOptionsMenu(menu, inflater);
    menu.clear();
    inflater.inflate(R.menu.your_menu, menu);
}
Run Code Online (Sandbox Code Playgroud)


小智 0

尝试在父片段中实现一个回调,该回调应该在销毁子片段之前调用!在该回调中放置 oncreateoptions()