當你點擊菜單圖標onMenuOpened
被調用兩次:第一次立即,然後當菜單準備。顯然第一次它是空的,因爲它沒有準備好。所以如果你想訪問這個回調中的菜單 - 只需檢查它爲空,如果不是這樣做的話。
簡單的實驗:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.activity_main_toolbar);
setSupportActionBar(toolbar);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add("first");
menu.add("second");
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
Log.d("tag", "onPrepareOptionsMenu called");
return super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onMenuOpened(int featureId, Menu menu) {
Log.d("tag", "onMenuOpened called");
if(menu!=null) {
Log.d("tag", "menu is ready");
} else {
Log.d("tag", "menu is null yet");
}
return super.onMenuOpened(featureId, menu);
}
}
輸出時,菜單圖標點擊:
D/tag: onMenuOpened called
D/tag: menu is null yet
D/tag: onPrepareOptionsMenu called
D/tag: onMenuOpened called
D/tag: menu is ready
非常感謝徹底澄清。在準備好之前調用onMenuOpened是奇怪的,因爲它是一個「Opened」事件處理程序,而不是「Opening」事件處理程序。 – Hong