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

來源:互聯網
上載者:User

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();
以上問題是出現在android4.0版本及之前,android4.1是不存在這個問題的。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.