2015-11-23 60 views
0

這是我的菜單佈局。如何動態更新MenuItem中的複選框?

注意的項目:

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 
    <item android:id="@+id/action_best_stores" 
     android:title="@string/showStores" 
     android:onClick="showHideStores" 
     android:enabled="true" 
     android:checkable="true" 
     app:showAsAction="never" 
     /> 
</menu> 

這是的OnAction功能。

public void showHideStores(MenuItem m) { 
    m.setChecked(!m.isChecked()); 
    SHOWING_STORES = !SHOWING_STORES; 
    showStoresProcess(SHOWING_STORES); 
    refreshData(); 
    invalidateOptionsMenu(); 

} 

每當我運行我的程序時,函數的工作原理是因爲應該發生的事情發生。除了ItemMenu本身發生變化的部分......它只是沒有做任何事情,複選框保持未選中狀態......我也試過setTitle,也沒有改變任何東西。

因此,第1行不會產生任何變化。

這是怎麼回事?

這是我吹菜單

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.main_list_actions, menu); 
     super.onCreateOptionsMenu(menu); 
     this.menu = menu; 
     refreshData(); 
     return true; 
    } 

通知功能是如何工作的,因爲屏幕變化的代碼,但它本身並沒有得到菜單「勾掉」或「選中」。

enter image description here

enter image description here

+0

你能應的代碼你在哪裏充氣菜單嗎? –

+0

使用onOptionsItemSelected代替,因爲它在這裏聲明http://developer.android.com/guide/topics/ui/menus.html#checkable –

+0

檢查m.isChecked()是否返回兩種狀態。 –

回答

0

問題解釋如下:

  • 當你調用invalidateOptionsMenu(),將重置爲默認的菜單。所以沒有發生。

解決方案:覆蓋onPrepareOptionsMenu()

@override 
public bool onPrepareOptionsMenu(Menu menu) 
{ 
    super.onPrepareOptionsMenu(menu); 
    MenuItem m = memenu.findItem(R.id.YourItemId); 
    m.setChecked(!m.isChecked());//something like this 

    return true; 
} 
0

刪除您來invalidateOptionsMenu()電話。撥打電話invalidateOptionsMenu()會觸發回撥到onCreateOptionsMenu(),這將創建一個新的菜單,該菜單將創建一個新的未檢查的MenuItem,基本上您不想停止。