1

我正在致力於實現ActionbarCompat的API 7+的應用程序。ActionBarCompat更改項目圖標

目前我有一個ActionBar上的「最喜歡的」圖標的活動,我試圖找到一種方法來切換喜歡和不喜歡之間的圖形。

我在onCreateOptionsMenu,onPrepareOptionsMenu和onOptionsItemSelected中玩過的所有努力都失敗了,看起來圖標只能在創建時更改,而不能在活動已經運行時更改。

有沒有人遇到過在運行時更改其中一個ActionBarCompat項目圖標的方法,而使用ActionBarCompat可以看到該活動,並仍然與API 11+上的本機ActionBars保持兼容性?

+1

[supportInvalidateOptionsMenu()](http://developer.android.com/reference/android/support/v7/app/ActionBarActivity.html#supportInvalidateOptionsMenu%28%29)看起來在這種情況下可能會有幫助。 – mobinvent 2013-08-10 04:51:34

+0

^這是正確的答案。這種組合並在正確的時間切換圖標圖形會導致它更新。 – Hamid 2013-08-13 14:02:17

回答

0

您需要實現onCreateOptionsMenu()中的一些基本邏輯,用於檢查項目是否受到歡迎,並根據該邏輯更改圖標。

在你setFavourite()方法,你將需要:

setFavourite() { 
    .... 
    if (changedFavourite) 
     invalidateOptionsMenu() 

查看文檔在這裏:http://developer.android.com/reference/android/app/Activity.html#invalidateOptionsMenu()

這應該迫使ABS重繪。

+1

對不起,但開發人員博客上的那個頁面明確指出invalidateOptionsMenu()已在API 11中實現,並且我的問題明確指出我需要它在API 7+上運行。我曾想到這一點,但由於上述原因,顯然這是不行的。 – Hamid 2012-07-11 16:05:15

+0

ActionBarSherlock爲API級別低於11的實現invalidateOptionsMenu()。試試看。 – Tushar 2012-07-11 17:14:57

+0

ActionBarSherlock不是我擔心的選項,但我會查看源代碼並查看它們是如何實現的。我在其他地方閱讀它只將API等級要求降低到了10. – Hamid 2012-07-12 07:57:17

0

受@ mobinvent評論的啓發我發現以下內容爲HoneyComb設備提供了ActionBarCompat選項菜單生命週期排序依據HoneyComb及以上版本中的invalidateOptionsMenu()。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) invalidateOptionsMenu(); 
else { 
    supportInvalidateOptionsMenu(); 
    openOptionsMenu(); 
    closeOptionsMenu(); 
} 

注意哈希要求打開選項菜單並關閉它。在我特別的例子中,我從onActivityResult調用這個,在這個階段看起來不會引入任何醜陋的菜單閃爍。

對ActionBar OS/devices之前的好消息!