1

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

除了我尝试在我的 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);
    }

有任何想法吗?谢谢。

4

2 回答 2

6

您可以使用 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);
 }
于 2017-07-07T10:14:00.053 回答
3

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

于 2017-07-07T10:16:27.310 回答