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

时间:2017-06-26 20:39:21

标签: android layout menu

我想以编程方式更改我的Activites中的一些标题。 我有一些像

这样的项目

“显示/隐藏内容1” “显示/隐藏某事2”

现在我想将文字改为:

“显示某事1” 并执行一些操作,并将此菜单项的文本更改为:

“隐藏东西1”.....

Set title of an Android Item

我测试此解决方案,并获得一个空指针

我的布局:

<?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>

我的代码:

@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);
        }
}

得到此错误:

进程:com.packagename.foo,PID:12441                                                                           java.lang.NullPointerException:尝试在空对象引用上调用接口方法'android.view.MenuItem android.view.MenuItem.setTitle(java.lang.CharSequence)'                                                                               在com.sherdle.universal.rallye.MainActivity.onCreateOptionsMenu(MainActivity.java:646)

在这一行:MenuItem item=menu.getItem(R.id.menu_1)

需要帮助:)

编辑:找到另一个解决方案:Android - How to dynamically change menu item text outside of onOptionsItemsSelected or onCreateOptionsMenu但不起作用

1 个答案:

答案 0 :(得分:1)

因为Menu的getItem()方法返回给定索引的菜单项,而不是传入资源ID,而资源ID可能会引发如上所述here in the docs的IndexOutOfBoundsException。相反,您应该使用索引值,因此第一个菜单项menu_1为0,另一个菜单项menu_2为1.