Pro Android學習筆記(三四) Menu(5) 動態選單
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow
也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!
OptionsMenu的建立方式
OptionMenu在第一次訪問該選單時呼叫,只調用一次。在以後的訪問中不再呼叫。在《Pro Android》的書中提到,對於Android 3.0引入的平板,是在Activity建立時呼叫。因為選單需要顯示在螢幕上,這個沒有進行試驗。無論如何onCreateOptionsMenu(Menu menu),只被呼叫一次。
但是有時候,我們需要動態選單,根據使用者和程式的互動情況,改變選單項。我們可以同對menuItem的visible,enable的屬性進行設定,也可以通過add和remove進行修改。如果我們需要大量的修改,再次建立optionMenu則是我們所需。
如何再次建立OptionsMenu
如果執行以下程式碼,將使原填充的選單項無效,當用戶再次訪問選單時,再次呼叫onCreateOptionsMenu(Menu menu)。
invalidateOptionsMenu();
由於一個activity只有一個optionMenu物件,invalidateOptionsMenu(),並不會重新建立新的物件,還是對應原來的menu物件,只是原來所填充的選單項都無效,也就是,我們並不需要通過menu.removeGroup()或者menu.removeItem()來刪除原有的選單項,它們都已經全部無效。
每次訪問都重新填充選單項
如果我們要每次訪問都重新對選單進行處理,使用onPrepareOptionsMenu()來替代onCreateOptionsMenu(),例如如下:
@Override
public boolean onPrepareOptionsMenu(Menu menu) { //每次訪問菜都時都會呼叫此函式。
Log.d("wei","onPrepareOptionsMenu is called, menuNum = " + menuNum);
Log.d("wei","Menu object is " + menu.toString());
menu.clear(); //上次填充的選單項仍然有效,如果需要重新進行設定,需要對原有選單進行清空
createMenu(menu); //填充選單項的函式
Log.d("wei","Menu has " + menu.size() + " items");
return super.onPrepareOptionsMenu(menu);
}
如果我們同時寫了onCreateOptionsMenu()和onPrepareOptionsMenu()的程式碼,使用者第一次訪問選單時,先呼叫onCreateOptionsMenu(),然後再呼叫onPrepareOptionsMenu()。在之後的選單訪問中,只調用onPrepareOptionsMenu()。如果中間執行了invalidateOptionsMenu(),則下次訪問選單時,先呼叫onCreateOptionsMenu(),然後再呼叫onPrepareOptionsMenu()。
本博文涉及的例子程式碼,可以在Pro Android學習:Menu中下載。
相關連結: 我的Android開發相關文章