选项菜单在运行时为空

Options Menu null at runtime

当在我的应用程序中执行某些操作时,我正在更改特定菜单项的可绘制对象。

除了我在 Activity.

的 onCreate 方法中尝试执行此操作外,一切正常

我正在使用以下方法:

menu.findItem(R.id.favorite).setIcon(R.drawable.ic_action_icons8_star_filled_100);

在 onClick 事件中,它完美地工作。

但是当我在我的 onCreate 中使用相同的方法时,它给我以下错误:

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

这是我用来膨胀 menu

的代码
private Menu menu;

--------------------


 @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.image_details, menu);

        this.menu = menu;

        return super.onCreateOptionsMenu(menu);
    }

有什么想法吗?谢谢。

您可以使用 onPrepareOptionsMenu(只要菜单即将显示,就会调用此方法)。您将获得空指针,因为 onCreateOptionsMenu 将在 onCreate 之后调用,因此您的菜单对象将为空。

@Override
 public boolean onPrepareOptionsMenu(Menu menu) {

    MenuItem favoriteItem = menu.findItem(R.id.favorite);

    favoriteItem.setIcon(getResources().getDrawable(R.drawable.drawable.ic_action_icons8_star_filled_100)); 

    return super.onPrepareOptionsMenu(menu);
 }

根据Activity lifecycleonCreateOptionsMenu是在onResume之后调用的,所以当onCreate被调用时,字段menu还没有被设置.如果您将呼叫移至 onPrepareOptionsMenu,它应该可以工作。