Android,以编程方式更改菜单项的标题

Android,以编程方式更改菜单项的标题,android,layout,menu,Android,Layout,Menu,我想以编程方式更改活动中的一些标题。 我有一些东西,比如 显示/隐藏某些内容1 显示/隐藏某物2 现在我想将文本更改为: 展示一些东西 和执行一些操作,并将此菜单项的文本更改为: 藏点什么 我测试这个解决方案,得到一个空指针 我的布局: <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:univers

我想以编程方式更改活动中的一些标题。 我有一些东西,比如

显示/隐藏某些内容1 显示/隐藏某物2

现在我想将文本更改为:

展示一些东西 和执行一些操作,并将此菜单项的文本更改为:

藏点什么

我测试这个解决方案,得到一个空指针

我的布局:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:universal="http://schemas.android.com/apk/res-auto">

    <item
        android:id="@+id/menu_1"
        universal:showAsAction="never"
        android:title="Show/Hide Something1" />

    <item
        android:id="@+id/menu_2"
        universal:showAsAction="never"
        android:title="Show/Hide Something2" />

</menu>
出现以下错误:

进程:com.packagename.foo,PID:12441 java.lang.NullPointerException:尝试对空对象引用调用接口方法“android.view.MenuItem android.view.MenuItem.setTitlejava.lang.CharSequence” 位于com.sherdle.universal.rallye.MainActivity.onCreateOptionsMenuMainActivity.java:646

在此行中:MenuItem item=menu.getItemR.id.menu_1

需要帮助:


EDIT:找到了另一个解决方案:但不起作用,因为Menu的getItem方法返回给定索引处的菜单项,而不是传入可能引发IndexOutOfBoundsException的资源ID,如前所述。相反,您应该使用索引值,以便第一个菜单项menu1为0,另一个菜单项menu2为1。

噢,该死的MenuItem item=menu.getItemR.id.menu1;//这里itemIndex是int,我应该仔细阅读注释:-O谢谢!现在它在索引中使用的速度更快:menu.findItemR.id.menu2;menu1.setTitleText;哪种方法更好?通过findItem还是getItem?@georf不确定哪一个更快,但我建议使用findItem,因为通过其资源ID引用视图是一种很好的做法。好的,谢谢!将使用findByItem它似乎是最好的版本感谢您的帮助=
@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.rallye_menu, menu);
        MenuItem item=menu.getItem(R.id.menu_1); // here itemIndex is int
        item.setTitle("YourTitle");
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.menu_1:
                // do some action
                return true;
            case R.id.menu_2:
                // doe other action
                return true;
                default:
                return super.onOptionsItemSelected(item);
        }
}