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

发布于 2021-02-02 22:44:50

我正在尝试从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;
}

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

关注者
0
被浏览
299
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    正如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);
    }
    


  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    我建议在活动中保留对你在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来在每次显示菜单时更新菜单项。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看