我正在尝试在正在运行activity
的后台执行任务时隐藏操作栏菜单项一段时间。
首先在活动的onPrepareOptionsMenu
方法中,我将MenuItem
实例检索为字段。
public void onPrepareOptionsMenu(final Menu menu) {
super.onPrepareOptionsMenu(menu);
// Retrieve and show the contextual settings menu item
mContextualSettings = menu.findItem(R.id.item_menu_contextual_settings);
mContextualSettings.setVisible(true);
}
稍后我使用该字段使其不可见并再次可见(通过使用setVisible方法)。
我想知道这是一个好方法,还是我应该以某种方式使用invalidateOptionsMenu()
让它再次可见?我可以遇到空指针异常吗?
感谢。
答案 0 :(得分:1)
我将MenuItem实例检索为字段。 [...]我想知道这是一个好方法还是我应该以某种方式使用invalidateOptionsMenu()使其再次可见?
这不是推荐的方式来做你正在尝试的事情。您最好使用supportInvalidateOptionsMenu()
触发onPrepareOptionsMenu()
和boolean
字段或方法进行检查,然后直接设置项目的可见性。
我可以遇到空指针异常吗?
在Android的最新版本中,onPrepareOptionsMenu()
可能会在Menu
通过onCreateOptionsMenu()
充气之前被调用。因此,您应始终对menu.findItem()
的结果执行空检查,或以其他方式防止此情况(可能通过检查是否menu.getSize() > 0
)。
答案 1 :(得分:0)
// instance variable
public Menu option_Menu
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_container, menu);
option_Menu = menu;
option_Menu.findItem(R.id.skip).setVisible(false);
return super.onCreateOptionsMenu(menu);
}
// when task is completed you can show your menu just by calling this method
public void setMenuVisible(boolean visible, int id) {
if (option_Menu != null) {
option_Menu.findItem(id).setVisible(visible);
}
}
答案 2 :(得分:0)
使用这种方式
MenuItem menuItem = menu.findItem(R.id.menu_done);
menuItem.setVisible(true); //visible
menuItem.setVisible(false); //gone
return true;`