如何通过id获取MenuItem

时间:2014-11-12 00:16:59

标签: android menuitem

我的res / menu / student_marks.xml文件中有我的menuItem:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".StudentMarks" >
    <item android:id="@+id/action_selected_year"
        android:title="@string/action_selected_year"
        android:showAsAction="withText|ifRoom"
        style="@style/AppTheme" />
</menu>

现在我需要这个项目来设置我的应用程序的特定部分的标题。

我可以使用此方法中的特定项目:

onOptionsItemSelected(MenuItem item)

问题是我需要项目'action_selected_year'而不使用此方法,但在我的程序的另一部分。
我不知道如何获得它。

3 个答案:

答案 0 :(得分:14)

Menu optionsMenu;

@Override
public boolean onCreateOptionsMenu(Menu menu) {
   getMenuInflater().inflate(R.menu.main, menu);
   //  store the menu to var when creating options menu
   optionsMenu = menu;
}

并获得一个菜单项:

MenuItem item = optionsMenu.findItem(R.id. action_selected_year);

答案 1 :(得分:9)

Menu optionsMenu;

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
       getMenuInflater().inflate(R.menu.main, menu);
       //  store the menu to var when creating options menu
       optionsMenu = menu;
    }

示例:更改第一个menuItem上的图标(optionsMenu应为!= null)

optionsMenu.getItem(0).setIcon(getResources()
    .getDrawable(R.drawable.ic_action_green));

答案 2 :(得分:1)

如果您的菜单位于NavigationView中 例如:

<com.google.android.material.navigation.NavigationView 
    android:id="@+id/navigationView"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    app:menu="@menu/menu_layout" />

然后您可以通过id来找到菜单项

NavigationView navigationView = findViewById(R.id.navigationView);
Menu menu = navigationView.getMenu();
MenuItem menuItem = menu.findItem(R.id.your_menu_item_id);