0

当我的应用程序中执行特定操作时,我正在更改特定菜单项的可绘制项。选项菜单在运行时为空

除了当我尝试在我的Activity的onCreate方法中执行此操作时,其他所有功能都可以正常工作。

我使用下面的方法:

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

在onClick事件和它完美的作品。

但是,当我用同样的方法在我的onCreate,它给了我下面的eror:

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

任何想法的代码?谢谢。

回答

1

您可以使用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); 
} 
1

按照Activity lifecycleonCreateOptionsMenuonResume后调用,所以当onCreate被调用时,现场menu尚未设置。如果您将呼叫转移到onPrepareOptionsMenu它应该工作。