動態改變actionbar的menu選單MenuItem的顯示

jia635發表於2014-04-14

摘要 onCreateOptionsMenu(Menu menu)方法中我們能夠通過getMenuInflater().inflate(R.menu.list_option, menu);來構建一個選單,並通過 menu.findItem(R.id.menu) 獲得具體的一個選單項。但這個onCreateOptionsMenu在activity的整個週期中只被呼叫一次,之後都不

 onCreateOptionsMenu(Menu menu)方法中我們能夠通過getMenuInflater().inflate(R.menu.list_option, menu);來構建一個選單,並通過


menu.findItem(R.id.menu)

獲得具體的一個選單項。但這個onCreateOptionsMenu在activity的整個週期中只被呼叫一次,之後都不會變化,於是在android的較新版本里有了onPrepareOptionsMenu方法。

onCreateOptionsMenu方法是不能動態載入選單的,因為他只呼叫了一次,你可以換onPrepareOptionsMenu這個方法來獲取,他每次點選選單都會呼叫。

這就貌似可以實現動態改變選單了。

 

但是在下面的場景中這樣還是無能為力的:

一個記事本列表介面,當記事條數為0時,actionbar選單項只有“新建”一個選單項
當我點選新建插入了一條記事,銷燬編輯介面,重新回到列表介面,這時actionbar要求顯示“新建”和“匯出”兩個選單項。

如果按照剛剛介紹的方法根本不能實現選單的動態顯示,因為那種辦法必須要按menu按鍵,而我的需求裡面是根據內容改變,不是手動觸發。

 

解決的辦法是在你要更新選單項的地方加上:

mActivity.getWindow().invalidatePanelMenu(Window.FEATURE_OPTIONS_PANEL);

這個是原生actionbar的解決辦法,如果你用的是 ActionBarSherlock,那麼呼叫

invalidateOptionsMenu();

相關文章