引用和更改菜单项

Referencing and changing a menu item

背景: 我正在尝试在操作栏中进行编辑 "button"(即菜单项),这将在 TextView 和编辑文本。我得到了工作。现在,我试图在单击按钮后将按钮中的文本更改为 "save"。

问题: 我找不到菜单项的 ById - 它 returns 为空。谁能告诉我我做错了什么?

这是菜单:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/itEdit"
        android:title="EDIT"
        app:showAsAction="always"
        />
</menu>

这是菜单设置(即扩展操作栏)

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.menu_written_note, menu);
    return true;
}

@Override
public boolean onMenuOpened(int featureId, Menu menu){
    // A global variable s.t. I could refer to it and update the text
    itEdit = findViewById(R.id.itEdit);
    return true;
}

切换部分如下:

public void toggleEdit() {
    if(isEditing) {
        // Editing -> Viewing

        // Toggling TextView and EditText

        if(itEdit != null) { // It is always null
            itEdit.setTitle("EDIT");
        }
    } else {
        // Viewing -> Editing

        // Toggling TextView and EditText

        if(itEdit != null) { // It is always null
            itEdit.setTitle("SAVE");
        }
    }
    isEditing = !isEditing;
}

您从错误的地方引用了菜单项。以下解决方案应该有效。

public class TestActivity extends AppCompatActivity {

  private Menu menu;

  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.menu_written_note, menu);

    this.menu = menu;

    return true;
  }

  private void updateMenuTitle() {
    MenuItem item = menu.findItem(R.id.itEdit);
    item.setTitle("Test");
  }

}