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它應該工作。