在片段中使用onPrepareOptionsMenu代替onCreateOptionsMenu
我在ActionBar
设置了一些片段菜单项时遇到了问题,我找到了一种方法来解决它,但我不明白它为什么起作用。
我想在onCreateOptionsMenu
方法中的菜单xml文件中onCreateOptionsMenu
它后立即更改菜单项中的可见性。 该代码似乎工作正常,但没有明显的影响。 我解决了在onCreateOptionsMenu
方法中增加菜单的问题,但改变了onPrepareOptionsMenu
方法中的可见性。
我想知道的是为什么在onCreateOptionsMenu
中更改可见性不起作用。
我可以在onPrepareOptionsMenu
中做什么,我无法在onCreateOptionsMenu
做什么?
这里有什么模式可循?
谢谢!
以下是相关的代码,以防万一:
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);
创建菜单之后,而不是之前。 这会在层次结构和其他片段中发送菜单,或者活动可能需要自行添加项目。
该活动负责显示和管理菜单,因此如果在将可见性更改为活动后更改可视性,则不会发生任何事情。
现在,当你调用super.onPrepareOptionsMenu(menu);
它会“准备”它的菜单,但它现在将考虑您在onCreateOptionsMenu
所做的更改。
可能是代码应该返回true来使菜单可见,这意味着你应该把return true;
语句onCreateOptionsMenu()
和onPrepareOptionsMenu()
。
希望这可以帮助。
我使用onPrepareOptionsMenu更新菜单上的哪些项目应该处于活动状态,哪些项目应该变灰/取消,具体取决于活动的当前状态。 使用菜单项的setVisible方法来控制当前是否显示在菜单上。
链接地址: http://www.djcxy.com/p/10965.html上一篇: Using onPrepareOptionsMenu instead of onCreateOptionsMenu in Fragment