Android 如何動態改變Actionbar上的item表徵圖

來源:互聯網
上載者:User

標籤:

1.Activity菜單機制 (與dialog類似)
Activity有一套機制來實現對菜單的管理,方法如下:
1.public boolean onCreateOptionsMenu(Menu menu)
此方法用於初始化菜單,其中menu參數就是即將要顯示的Menu執行個體。
返回true則顯示該menu,false 則不顯示;
(只會在第一次初始化菜單時調用)

2.public boolean onPrepareOptionsMenu(Menu menu)
在onCreateOptionsMenu執行後,菜單被顯示前調用;如果菜單已經被建立,則在菜單顯示前被調用。
同樣的, 返回true則顯示該menu,false 則不顯示;
(可以通過此方法動態改變菜單的狀態,比如載入不同的菜單等,在onCreateOptionsMenu調用之後調用)

3.public void onOptionsMenuClosed(Menu menu)
每次菜單被關閉時調用.
(菜單被關閉有三種情形,menu按鈕被再次點擊、back按鈕被點擊或者使用者選擇了某一個功能表項目)
            
4.public boolean onOptionsItemSelected(MenuItem item)
功能表項目被點擊時調用,也就是功能表項目的監聽方法。

    通過這幾個方法,可以得知,對於Activity,同一時間只能顯示和監聽一個Menu 對象。

但是這個onCreateOptionsMenu在activity的整個周期中只被調用一次,之後都不會變化,於是在android的較新版本裡有了onPrepareOptionsMenu方法。

onCreateOptionsMenu方法是不能動態載入菜單的,因為他只調用了一次,你可以換onPrepareOptionsMenu這個方法來擷取,他每次點擊菜單都會調用。

由上面分析可知道,我們可以在onPrepareOptionsMenu裡面改變item,但是如何?在想改變Menu 的item的時候調用onPrepareOptionsMenu呢?

解決的辦法是在你要更新功能表項目的地方加上:

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

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

invalidateOptionsMenu();

/*     *      * 當文章重新整理時候,如果贊過了顯示ic_menu_fav_pressed表徵圖     */    @Override    public boolean onPrepareOptionsMenu(Menu menu) {        System.out.println("執行了onPrepareOptionsMenu");        if (collectionDB.isHasArtivle(article.getId())) {            menu.findItem(R.id.action_fav).setIcon(                    R.drawable.ic_menu_fav_pressed);            menu.findItem(R.id.action_fav).setCheckable(false);        } else {            menu.findItem(R.id.action_fav).setIcon(R.drawable.ic_menu_fav);            menu.findItem(R.id.action_fav).setCheckable(true);        }        // getSupportMenuInflater().inflate(R.menu.book_detail, menu);        return super.onPrepareOptionsMenu(menu);    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        System.out.println("執行了onCreateOptionsMenu");        getSupportMenuInflater().inflate(R.menu.book_detail, menu);        return true;    }

 

Android 如何動態改變Actionbar上的item表徵圖

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.