2016-04-06 4 views
1

Я пытаюсь проверить элемент по умолчанию в группе меню. Я ничего не меняю в меню с помощью кода.Проверка элемента по умолчанию в группе меню

Меню выглядит следующим образом:

<?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:title="Map type"> 
    <menu> 
     <group 
      android:checkableBehavior="single" 
      > 
      <item 
       android:id="@+id/nav_map_type_normal" 
       android:title="Normal" 
       android:checked="true" 
       /> 
      <item 
       android:id="@+id/nav_map_type_satellite" 
       android:title="Satellite" 
       /> 
      <item 
       android:id="@+id/nav_map_type_terrain" 
       android:title="Terrain" 
       /> 
      <item 
       android:id="@+id/nav_map_type_hybrid" 
       android:title="Hybrid" 
       /> 
     </group> 
    </menu> 
</item> 

<item 
    android:id="@+id/nav_toggle_traffic" 
    android:title="Toggle traffic" 
    /> 

<item 
    android:id="@+id/nav_settings" 
    android:icon="@drawable/ic_settings" 
    android:title="@string/action_settings" 
    android:orderInCategory="100" 
    /> 

</menu> 

При первом отображении меню, первый пункт (Normal) подсвечивается для обозначения проверяется. Это то, что я хочу. Затем я хочу, чтобы подсветка перемещалась по группе при нажатии каждого элемента.

Проблема:

  • Если я нажимаю Satellite, нормальные и спутниковое подсвечиваются

    Если я затем нажмите Hybrid, Normal остается подсвеченным, Гибрид подсвечена и Satellite возвращается к его неконтролируемое состояние.

Только после фактического нажатия кнопки «Нормальное» состояние его проверки ведет себя так, как должно.

Я попытался удалить андроид: checked = "true" и используя performIdentifierAction в коде, но это не изменило состояние проверки.

ответ

0

Извините, я забыл упомянуть, что меню используется в NavigationView, и, как оказалось, все меняется.

navigationView.setCheckedItem(R.id.nav_map_type_normal); 

выполняет именно то, что я хочу. Я нашел его в комментарии здесь Navigation drawer: How do I set the selected item at startup?

0

Поскольку вы делаете NORMAL по умолчанию TRUE, вам необходимо явно установить его в false, как и когда выбраны Satellite, Hybrid или Terrain.

Я считаю, что в настоящее время вы устанавливаете NORMAL как android: checked = false в коде выбора onclickmenu nav_map_type_normal. т. е. вы в основном не проверяете его, так как по умолчанию он выбран как ИСТИНА. Пожалуйста, сделайте то же самое, когда выбраны другие параметры.

+0

Я могу заставить его работать, просто установив параметр «Обычный» как отмеченный (ложный) всякий раз, когда нажимается другая опция, но я действительно хочу, чтобы он работал без необходимости добавлять код , Я думаю, что ** ** должно работать так, как будто это группа переключателей, и в этом случае всегда выбирается одна кнопка. –

+0

Да, если вы хотите, чтобы он работал без добавления кода, вам следует использовать RadioGroup и RadioButtons, как указано здесь - http://developer.android.com/guide/topics/ui/controls/radiobutton.html –

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