我的问题是我想将MenuItem中的图标从Visible更改为不可见,但是这个过程需要通过onOptionsItemSelected。如果我在菜单上调用,它会获取ClickItem的位置,而另一个需要隐藏。我还检查了定义MenuItem和findViewById,它们没有用,因为它没有视图。 让我向您展示我的代码的一部分,以使其更清晰:
@Override
public boolean onOptionsItemSelected(MenuItem menu) {
switch (menu.getItemId()) {
case R.id.menu_refresh:
// Stuff
case R.id.menu_settings:
(Somehow point to R.id.menu_refresh).setVisible(false);
}
return super.onOptionsItemSelected(menu);
}
有什么想法吗?
答案 0 :(得分:1)
如果您正在使用2.3样式菜单,则不要在onOptionsItemSelected中更改它。您可以在下次启动菜单时在onPrepareOptionsMenu中执行此操作(通过保存适合保存的任何数据)。
如果您有操作栏,则需要在活动上调用invalidateOptionsMenu以重新加载菜单,并在创建功能中执行禁用。
答案 1 :(得分:1)
我从docs读到的内容,针对此案例有一种特殊方法:onPrepareOptionsMenu(Menu menu)
。
准备要显示的屏幕标准选项菜单。每次显示菜单时都会调用此菜单。您可以使用此方法有效地启用/禁用项目或以其他方式动态修改内容。
所以这更像是这样:
@Override
public boolean onOptionsItemSelected(MenuItem menu) {
switch (menu.getItemId()) {
case R.id.menu_refresh:
// Stuff
case R.id.menu_settings:
showRefresh = false;
//Stuff
}
return super.onOptionsItemSelected(menu);
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
menu.findItem(R.id.menu_refresh).setVisible(showRefresh);
return super.onPrepareOptionsMenu(menu);
}