【问题标题】:Can't find menu item找不到菜单项
【发布时间】:2020-01-29 21:22:56
【问题描述】:

编辑:已解决,我在答案中详细说明了解决方案。

我可能遗漏了一些简单的东西,我认为解决方案会很简单,但我找不到。

我的问题是我想动态更改菜单项的文本(显示在导航抽屉中),但是当我尝试使用 findItem(R.id.item1) 时,我得到一个空值。

这是我尝试更改文本的代码:

// call invalidateOptionsMenu(); to refresh
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    menu.findItem(R.id.item1).setTitle("Some random text");
    return super.onPrepareOptionsMenu(menu);
}

还有我的菜单:

<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group
    android:id="@+id/group_users"
    android:checkableBehavior="single">
    <item
        android:id="@+id/item1"
        android:icon="@drawable/util_bleu_24dp"
        android:title="@string/item1"/>
    <item
        android:id="@+id/item2"
        android:icon="@drawable/util_rose_24dp"
        android:title="@string/item2"/>
</group>

当我尝试执行它时,我得到了错误:

java.lang.NullPointerException: Attempt to invoke interface method 'android.view.MenuItem android.view.MenuItem.setTitle(java.lang.CharSequence)' on a null object reference

有人可以帮我找出问题所在吗?

【问题讨论】:

  • 你可以试试这个解决方案,希望它对你有用。 stackoverflow.com/questions/7066657/…
  • 是的,我在研究期间看到了这篇文章,它启发了我编写代码,但他们没有谈论我的问题。还是谢谢
  • 您是否尝试将此 android:enabled="true" 添加到您的项目中?
  • 嗯,我在你给我的链接中找不到它,我根据你的评论尝试了,只是在我的 xml 菜单项中添加了“android:enabled=true”,但它没有改变任何东西

标签: android menu


【解决方案1】:

在创建一个新项目以尝试将其清理干净后,我发现我忘了在代码中添加这部分:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.personnal_menu, menu);
    return true;
}

这创建了另一个与我尝试修改的菜单不同的菜单,并且在这个新菜单上完美运行。所以实际上我只是在寻找错误的问题。

解决方案是这样做(在活动的任何地方):

NavigationView navigationView = findViewById(R.id.nav_view_left);
Menu menu = navigationView.getMenu();
MenuItem item1 = menu.findItem(R.id.item1);
item1.setTitle("Some random text");

我希望这可以帮助任何和我犯同样错误的人。

【讨论】:

    猜你喜欢
    • 2020-12-25
    • 1970-01-01
    • 2023-03-06
    • 2014-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多