2014-07-12 6 views
6

Mam proste PopupMenu, ale po kliknięciu elementu przedmiot nie jest sprawdzany. Czemu?Sprawdzony element Androida PopupMenu nie sprawdza się

W dokumentacji jest: Pozycje menu w menu ikon (z menu opcji) nie mogą wyświetlać pola wyboru ani przycisku opcji. Przycisk radiowy jest widoczne, ale tylko stan nie zmienia się ...

Javy

public void showSortPopup() { 
    View menuItemView = findViewById(R.id.action_sort); 
    PopupMenu popup = new PopupMenu(this, menuItemView); 
    popup.inflate(R.menu.sort); 
    popup.getMenu().findItem(R.id.sort_def).setChecked(true); 
    popup.setOnMenuItemClickListener(new OnMenuItemClickListener() { 

     @Override 
     public boolean onMenuItemClick(MenuItem item) { 

      switch (item.getItemId()) { 
       case R.id.sort_def: 
        sortOrder = CardCursorContract.CardCursor.DEFAULT_SORT; 
        mCardsFragment.setSortOrder(sortOrder); 
        savePref(); 
        if (item.isChecked()) item.setChecked(false); 
        else item.setChecked(true); 
        break; 
       case R.id.sort_asc: 
        sortOrder = CardCursorContract.CardCursor.ALPHABETICAL_ASC_SORT; 
        mCardsFragment.setSortOrder(sortOrder); 
        savePref(); 
        if (item.isChecked()) item.setChecked(false); 
        else item.setChecked(true); 
        break; 
       case R.id.sort_desc: 
        sortOrder = CardCursorContract.CardCursor.ALPHABETICAL_DESC_SORT; 
        mCardsFragment.setSortOrder(sortOrder); 
        savePref(); 
        if (item.isChecked()) item.setChecked(false); 
        else item.setChecked(true); 
        break; 
       default: 
        break; 
      } 
      return false; 
     } 
    }); 
    popup.show(); 
} 

pliku XML

<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
<group android:checkableBehavior="single"> 
<item android:id="@+id/sort_def" 
     android:title="@string/action_sort_def" 
     android:orderInCategory="1" 
     android:showAsAction="always" /> 

<item android:id="@+id/sort_asc" 
     android:title="@string/action_sort_name" 
     android:orderInCategory="2" 
     android:showAsAction="always" /> 

<item 
     android:id="@+id/sort_desc" 
     android:title="@string/action_sort_name_desc" 
     android:orderInCategory="3" 
     android:showAsAction="always"/> 
</group> 

Ekran

enter image description here

Odpowiedz

2

Przede wszystkim można uprościć Jeśli zaznaczone else do

item.setChecked(!item.isChecked()) 

Że sposób będzie zawsze przełączać go z true → false i na odwrót.

Ale problem polega na tym, że masz radiobuttons, co powyższe stwierdzenie sprawia, że ​​group jest sprawdzane, ale to, co chcesz, to mieć sprawdzone item.

Aby uzyskać zachowanie, którego szukasz, możesz użyć item.getSubmMenu(), a następnie użyć metody setChecked w wybranym podmenuItem, które chcesz.

Na przykład:

//This will refer to the default, ascending or descending item. 
MenuItem subMenuItem = item.getSubMenu().getItem(INDEX_OF_ITEM); 
//Check or uncheck it. 
subMenuItem.setChecked(!subMenuItem.isChecked()); 
0

** Zamień te linie w każdym przypadku **

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

Aby

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

To nie ma sensu, ale próbowałem go i nadal to nie działa ... – Tomas