我正在使用Appcompat工具栏,它在Activity中有一个带自定义操作视图的MenuItem。当我切换到片段时,我有单独的工具栏,我不希望活动MenuItem以片段形式显示,因此我将其可见性设置为false。
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
MenuItem menuItem = menu.findItem(R.id.action_notification);
menuItem.setVisible(false);
super.onCreateOptionsMenu(menu, inflater);
}
到目前为止一切正常。
但是当我回到活动时,同样的MenuItem是不可见的。这就是我如何让它再次可见。因为我在onResume()中使菜单无效而onCreateOptionsMenu被调用,但是MenuItem不可见。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.dashboard_actionbar_actions, menu);
MenuItem menuItem = (MenuItem) menu.findItem(R.id.action_notification);
menuItem.setVisible(true).setEnabled(true);
return super.onCreateOptionsMenu(menu);
}
我在这里错过了什么吗?
答案 0 :(得分:1)
您必须在片段中设置不同的菜单:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
// TODO Add your menu entries here
super.onCreateOptionsMenu(menu, inflater);
}
如果您想隐藏片段中的菜单,请使用setHasOptionsMenu(false)
:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(false);
}
当你说切换到片段时你是否在相同的Activity上切换片段?如果是这样,最好的方法是从Activity中删除菜单代码并在Fragment中实现它,这样就可以在Fragment级别控制菜单。
答案 1 :(得分:0)
Javadocs说:
public boolean onCreateOptionsMenu(菜单菜单)
仅在选项菜单第一次调用时调用一次 显示。要在每次显示菜单时更新菜单,请参阅 onPrepareOptionsMenu(菜单)
因此,如果您只是隐藏片段,则不会重新创建活动(但不清楚,什么是从活动和片段“切换”,片段无法在没有活动的情况下显示),因此此函数“onCreateOptionsMenu”将不会再次打电话。
最简单的方法是将MenuItem保存为活动中的成员变量,并使用方法“showMenu / hideMenu”。当你改变片段时,打电话给他们。