1. 程式人生 > >Pro Android學習筆記(三四) Menu(5) 動態選單

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開發相關文章

           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述