2016-02-02 2 views
1

У меня есть две группы в Android, как с одним контролируемым поведением.2 однонаправленные группы в меню Android

<item 
    android:id="@+id/sort_item" 
    android:title="One"> 
    <menu> 
     <group 
      android:id="@+id/menu_group_sort" 
      android:checkableBehavior="single"> 
      <item 
       android:id="@+id/nav_sort_new" 
       android:title="@string/menu_new" /> 
      <item 
       android:id="@+id/nav_sort_hot" 
       android:title="@string/menu_hot" /> 
      <item 
       android:id="@+id/nav_sort_top" 
       android:title="@string/menu_top" /> 
     </group> 
    </menu> 
</item> 

<item 
    android:id="@+id/filter_item" 
    android:title="Two"> 
    <menu> 
     <group 
      android:id="@+id/menu_group_filter" 
      android:checkableBehavior="single"> 
      <item 
       android:id="@+id/nav_category_all" 
       android:title="@string/menu_all" /> 
      <item 
       android:id="@+id/nav_category_business" 
       android:title="@string/menu_business" /> 
      <item 
       android:id="@+id/nav_category_technology" 
       android:title="@string/menu_technology" /> 
      <item 
       android:id="@+id/nav_category_politics" 
       android:title="@string/menu_politics" /> 
     </group> 
    </menu> 
</item> 

Что я хочу, когда вы выбираете элемент из одной группы, он является «единственным» внутри этой группы. Что происходит, так это то, что обе группы разделяют «что», и он не работает должным образом.

Я прочитал все другие сообщения об этом, и ни одно из решений (если оно не работает) не работало. Кто-нибудь знает? Это кажется довольно простой вещи ..

+0

Можете ли вы разместить свой код в 'onOptionsItemSelected (ItemItem item)', где вы выбрали выбранный элемент? Я скопировал ваше XML-меню в свое приложение, добавил этот оператор: 'item.setChecked (true);', и он работает как ожидалось - элементы из каждой группы не связаны. –

+0

@qbix фактически использует NavigationView, поэтому onNavigationItemSelected. Я никогда не называю setChecked (true); потому что NavigationView, я думаю, делает это автоматически. – automaton

ответ

1

Это кажется ошибка в NavigationDrawer (версия 23), как указано в this answer

версии 23 из NavigationView сделал полностью изменить структуру как в меню построено - теперь оно основано на RecyclerView, как указано в комментариях выпуска Google+.

От исходного кода адаптера NavigationMenuPresenter (который контролирует , как отображаются и сохраняются пункты меню), он появляется только сохраняется один проверили пункт и проверка один пункт делает снимите флажок другой проверил пунктов.

Я бы пройти весь путь обратно в 22.0.0 в моем build.gradle:

com.android.support:design:22.0.0 

Или сделать ручную проверку проверяемых элементов в функции onNavigationItemSelected(MenuItem item).

+0

Вы правы, что это ошибка, но вручную настраивается menuItem.setChecked (true | false); in onNavigationItemSelected * не работает *. Я попробую onDrawerOpened вместо этого ... знаете ли вы, как я могу вручную изменить выбранный стиль? Мне, возможно, придется вручную применить стиль к правильным элементам. – automaton

+0

О, @automation Мне удалось использовать 'setChecked (true)' когда я вернулась к 23.0.0. Я использовал ваше XML-макет меню и этот фрагмент: http : //pastebin.com/iXrT936Q –

Смежные вопросы