我在ActionBar
中设置一些 fragment 菜单项时遇到问题,我找到了解决方法,但是我不明白为什么它起作用。
我想通过onCreateOptionsMenu
方法从菜单xml文件中添加菜单项后立即更改菜单项的可见性。该代码似乎可以正常工作,但是没有可见的效果。我解决了用onCreateOptionsMenu
方法扩大菜单的问题,但更改了onPrepareOptionsMenu
方法中菜单的可见性。
我想知道的是为什么更改onCreateOptionsMenu
中的可见性不起作用。
我在onPrepareOptionsMenu
中不能做什么?
这里有什么模式可循吗?
谢谢!
以下是相关代码,以防万一:
public class MyFragment extends Fragment {
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.my_menu, menu);
// This does not work, compiles and runs fine, but has no visible effect
MenuItem someMenuItem = menu.findItem(R.id.some_menu_item);
someMenuItem.setVisible(false);
}
@Override
public void onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
// This does work
MenuItem someMenuItem = menu.findItem(R.id.some_menu_item);
someMenuItem.setVisible(false);
}
}
最佳答案
您应该在创建菜单之后而不是之前调用super.onCreateOptionsMenu(menu, inflater);
。这会将菜单发送到层次结构和其他 fragment 中,或者 Activity 可能要自己添加项目。
该 Activity 负责显示和管理菜单,因此,如果在将可视性发送到 Activity 之后更改其可见性,则不会发生任何事情。
现在,当您调用super.onPrepareOptionsMenu(menu);
时,它将“准备”它的菜单,但是现在它将考虑您在onCreateOptionsMenu
中所做的更改。