如何在 Android 中动态更改菜单项文本

新手上路,请多包涵

我正在尝试从 onOptionsItemSelected(MenuItem item) 方法之外更改菜单项的标题。

我已经做了以下事情;

 public boolean onOptionsItemSelected(MenuItem item) {
  try {
    switch(item.getItemId()) {
      case R.id.bedSwitch:
        if(item.getTitle().equals("Set to 'In bed'")) {
          item.setTitle("Set to 'Out of bed'");
          inBed = false;
        } else {
          item.setTitle("Set to 'In bed'");
          inBed = true;
        }
        break;
    }
  } catch(Exception e) {
    Log.i("Sleep Recorder", e.toString());
  }
  return true;
}

但是我希望能够在此方法之外修改特定菜单项的标题。

原文由 Garbit 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 907
2 个回答

正如 JxDarkAngel 建议的那样,从 Activity 的任何地方调用它,

 invalidateOptionsMenu();

然后覆盖:

 @Override
public boolean onPrepareOptionsMenu(Menu menu) {
  MenuItem item = menu.findItem(R.id.bedSwitch);
    if (item.getTitle().equals("Set to 'In bed'")) {
        item.setTitle("Set to 'Out of bed'");
        inBed = false;
    } else {
        item.setTitle("Set to 'In bed'");
        inBed = true;
    }
  return super.onPrepareOptionsMenu(menu);
}

是一个更好的选择。我使用了来自 https://stackoverflow.com/a/17496503/568197 的答案

原文由 Todd DeLand 发布,翻译遵循 CC BY-SA 4.0 许可协议

我建议在活动中保留对您在 onCreateOptionsMenu 中收到的 Menu 对象的引用,然后使用它来检索需要更改的 MenuItem,并在需要时进行更改。例如,您可以按照以下方式执行某些操作:

 public class YourActivity extends Activity {

  private Menu menu;
  private String inBedMenuTitle = "Set to 'In bed'";
  private String outOfBedMenuTitle = "Set to 'Out of bed'";
  private boolean inBed = false;

  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);

    // Create your menu...

    this.menu = menu;
    return true;
  }

  private void updateMenuTitles() {
    MenuItem bedMenuItem = menu.findItem(R.id.bedSwitch);
    if (inBed) {
      bedMenuItem.setTitle(outOfBedMenuTitle);
    } else {
      bedMenuItem.setTitle(inBedMenuTitle);
    }
  }

}

或者,您可以覆盖 onPrepareOptionsMenu 以在每次显示菜单时更新菜单项。

原文由 Charles Harley 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题