2011-04-30 62 views
6

我已經爲了讀Android開發者頁面的說明問題與可選中的菜單項來獲得可選中的菜單項:的Android -

http://developer.android.com/guide/topics/ui/menus.html

這是我xmlmenu:

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <group android:checkableBehavior="all"> 
     <item android:id="@+id/regu" 
       android:title="@string/Regulatory" /> 
     <item android:id="@+id/warn" 
       android:title="@string/Warning" /> 
     <item android:id="@+id/temp" 
       android:title="@string/Temporary" /> 
     <item android:id="@+id/bicy" 
       android:title="@string/Bicycle" /> 
    </group> 
</menu> 

這裏是我的代碼:

@Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
     case R.id.regu: 
      if (item.isChecked()) 
      { 
       item.setChecked(false); 
       currAvailableOptions++; 
      } 
      else if(0 != currAvailableOptions) 
      { 
        item.setChecked(true); 
        currAvailableOptions--; 
      } 
      return true; 
     case R.id.warn: 
      if (item.isChecked()) 
      { 
       item.setChecked(false); 
       currAvailableOptions++; 
      } 
      else if(0 != currAvailableOptions) 
      { 
        item.setChecked(true); 
        currAvailableOptions--; 
      } 
     return true; 
     case R.id.temp: 
      if (item.isChecked()) 
      { 
       item.setChecked(false); 
       currAvailableOptions++; 
      } 
      else if(0 != currAvailableOptions) 
      { 
        item.setChecked(true); 
        currAvailableOptions--; 
      } 
      return true; 
     default: 
     return super.onOptionsItemSelected(item); 
     } 
    } 

public boolean onCreateOptionsMenu(Menu menu) { 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.app_menu, menu); 
     return true; 
    } 

問題是當我cl舔了一個項目,菜單項消失。它不必爲了檢查其他菜單項而保持可見狀態?

有什麼想法?

Greetings

+0

你有沒有解決這個問題?我有同樣的問題。 – Kalina 2011-08-15 21:14:13

回答

0

什麼是currAvailableOptions?我看了你鏈接的文章,那裏沒有任何內容。看起來你需要做的只是檢查:

if (item.isChecked()) 
     item.setChecked(false); 
    else 
     item.setChecked(true); 

或者至少這就是本教程所說的。也許你應該再給它一次閱讀?希望這可以幫助。

+4

這可以縮寫爲'item.setChecked(!item.isChecked())':-) – MByD 2011-04-30 20:08:02

2

我知道這不是您的問題的直接答案,但請考慮下面的代碼而不是您的開關,它可能會幫助您找到問題。

public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    case R.id.regu: 
    case R.id.warn: 
    case R.id.temp: 
     if (item.isChecked()) 
      currAvailableOptions++; 
     else if(currAvailableOptions != 0) 
      currAvailableOptions--; 
     item.setChecked(!item.isChecked()); 
     return true; 
    default: 
     return super.onOptionsItemSelected(item); 
    } 
} 
3

可選中的項目僅出現在子菜單或上下文菜單。

並與他們子(谷歌)的意思是:

子菜單當用戶觸摸 包含嵌套菜單的菜單項出現的菜單項浮動列表。

因爲你的菜單項都沒有子菜單項,它不會工作

-1

你也許應該補充休息;每個情況後聲明:

public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    case R.id.item1: 
     item.setChecked(!item.isChecked()); 
     break; 
    case R.id.item2: 
     item.setChecked(!item.isChecked()); 
     break; 
    default: 
     break; 
    } 
    return super.onOptionsItemSelected(item); 
} 
+0

但是這會真正解決OP的問題,還是隻是建議以某種方式改進代碼? – user280109 2012-12-09 23:45:26

+0

忘了添加相關問題: http://stackoverflow.com/a/8564008 – kolpazar 2012-12-11 12:03:38

+1

他在每種情況下都有一個'return',所以不需要'bre​​ak' – invertigo 2014-10-07 19:11:43