我發現了一些困惑,我在這篇文章中 http://developer.android.com/guide/topics/ui/menus.html不同的行爲與方法onCreateOptionsMenu
下面是一段簡單的代碼和輸出 當我的Android 3.0
- 和2線系統上啓動應用程序創建活動後立即執行
當菜單被按下並且菜單項被選中時,打印3.和4.行
Probem是第5行和buttonHandler方法,該方法調用invalidateOptionsMenu();的調用 和結果是6號線和7
爲什麼系統onPrepareOptionsMenu即使他們寫
在Android 3.0之前調用onCreateOptionsMenu更高,你必須調用invalidateOptionsMenu()當你想更新菜單,因爲菜單總是打開的。系統然後會調用onPrepareOptionsMenu(),以便更新菜單項。
在這種情況下onCreateOptionsMenu被稱爲每次invalidateOptionsMenu(), 後,但是當我開始在Android 2.3 onCreateOptionsMenu應用程序被調用一次。
1 INFO/System.out的(382):onCreateOptionsMenu
2 INFO/System.out的(382):onPrepareOptionsMenu
3 INFO/System.out的(382):onPrepareOptionsMenu
4 INFO/System.out的( 382):onOptionsItemSelected
5 INFO/System.out的(382):buttonHandler
6 INFO/System.out的(382):onCreateOptionsMenu
7 INFO/System.out的(382):onPrepareOptionsMenu
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
public boolean onCreateOptionsMenu(Menu menu) {
System.out.println("onCreateOptionsMenu");
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.game_menu, menu);
return true;
}
public boolean onPrepareOptionsMenu(Menu menu) {
System.out.println("onPrepareOptionsMenu");
return super.onPrepareOptionsMenu(menu);
}
public boolean onOptionsItemSelected(MenuItem item) {
System.out.println("onOptionsItemSelected");
return super.onOptionsItemSelected(item);
}
public void buttonHandler(View v){
System.out.println("buttonHandler");
invalidateOptionsMenu();
}
在方法onCreateOptionsMenu()中midify菜單是否正確,或者我必須在方法invalidateOptionsMenu()中做到這一點? – user569890 2011-05-17 11:05:00
@ user569890:在任何情況下,只需實現'onCreateOptionsMenu()'構建正確的菜單。當菜單改變時調用'invalidateOptionsMenu()'。 – CommonsWare 2011-05-17 11:10:23