0

我的问题是我想将 MenuItem 的图标从可见更改为不可见,但这当然需要通过 onOptionsItemSelected 进行。如果我调用菜单,它会获取单击的 MenuItem,而需要隐藏另一个。而且我还检查了定义 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);
}

有任何想法吗?

4

2 回答 2

1

如果你在做一个 2.3 风格的菜单,你不要在 onOptionsItemSelected 中改变它。您在下次启动菜单时在 onPrepareOptionsMenu 中执行此操作(通过保存适合保存的任何数据)。

如果您有操作栏,则需要在活动上调用 invalidateOptionsMenu 以重新加载菜单,并在创建函数中进行禁用。

于 2013-03-18T16:30:16.263 回答
1

我从文档中读到的内容,对于这种情况有一种特殊的方法: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);
}
于 2013-03-18T16:32:42.057 回答