在我的应用中进行某些操作时,我正在更改特定菜单项的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);
}
有什么想法吗?感谢。
答案 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
,它应该有效。