Rob*_*uba 5 android android-menu android-fragments android-actionbar android-toolbar
我设置了3个“顶层”片段,每个片段都使用自己的子片段管理器来提供向下导航。这些顶级片段可以通过使用主要活动的支持片段管理器进行替换来切换。
这个顶级片段之一具有一个子片段,该子片段使用setHasOptionsMenu()和将菜单选项添加到工具栏/操作栏,onCreateOptionsMenu()并且效果很好。
现在我刚注意到的问题是:
添加新的子片段,并且隐藏带有菜单项的子片段(并将事务添加到顶级片段的后堆栈)时,菜单项消失。类似地,当通过撤消事务再次看到该片段时,菜单项将返回。这是期望的行为,似乎完全由Fragment框架处理。
但是,如果子片段可见(因此其菜单项出现在工具栏中),并且我切换了顶层片段,则菜单项仍保留在工具栏中。
我本来希望菜单项被清除,因为不仅属于其的子片段已被转储,而且甚至其父片段(位于顶层片段中)也已被完全替换(甚至没有添加到后台,只是直接替换)。
我invalidateOptionsMenu()认为只要传入的顶层片段已恢复,我就可以调用该活动,但是我觉得缺少一些东西来像在顶层片段中导航时那样自动处理。
在创建或重新创建每个片段之后,将调用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)
| 归档时间: |
|
| 查看次数: |
3561 次 |
| 最近记录: |