选项菜单在运行时为null

时间:2017-07-07 09:45:58

标签: android nullpointerexception android-optionsmenu oncreateoptionsmenu

在我的应用中进行某些操作时,我正在更改特定菜单项的drawable。

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

有什么想法吗?感谢。

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:2)

根据Activity lifecycle,在onCreateOptionsMenu之后调用onResume,因此在调用onCreate时,尚未设置字段menu。如果您将呼叫转移到onPrepareOptionsMenu,它应该有效。