选项菜单在运行时为空
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 lifecycle,onCreateOptionsMenu
是在onResume
之后调用的,所以当onCreate
被调用时,字段menu
还没有被设置.如果您将呼叫移至 onPrepareOptionsMenu
,它应该可以工作。
当在我的应用程序中执行某些操作时,我正在更改特定菜单项的可绘制对象。
除了我在 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 lifecycle,onCreateOptionsMenu
是在onResume
之后调用的,所以当onCreate
被调用时,字段menu
还没有被设置.如果您将呼叫移至 onPrepareOptionsMenu
,它应该可以工作。