Подменю с использованием навигационного представления не проверяется

Я использую библиотеку поддержки дизайна Android для создания макета ящика.

В моем NavigationView у меня есть группа меню, которая содержит подменю.

Вот мой файл меню.

<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <group android:checkableBehavior="single">
        <item
            android:id="@+id/nav_home"
            android:icon="@drawable/ic_dashboard"
            android:title="Home" />
        <item
            android:id="@+id/nav_messages"
            android:icon="@drawable/ic_event"
            android:title="Messages" />
        <item
            android:id="@+id/nav_friends"
            android:icon="@drawable/ic_headset"
            android:title="Friends" />
        <item
            android:id="@+id/nav_discussion"
            android:icon="@drawable/ic_forum"
            android:title="Discussion" />

        <item android:title="Sub Menus">
            <menu>
                <item
                    android:id="@+id/sub_one"
                    android:icon="@drawable/ic_dashboard"
                    android:title="Sub item 1" />
                <item
                    android:id="@+id/sub_two"
                    android:icon="@drawable/ic_forum"
                    android:title="Sub item 2" />
            </menu>
        </item>
    </group>

Слушатель кликов по моему элементу

navigationView.setNavigationItemSelectedListener(
                new NavigationView.OnNavigationItemSelectedListener() {
                    @Override
                    public boolean onNavigationItemSelected(MenuItem menuItem) {

                        Log.d("Item Click : ", menuItem.getTitle().toString());
                        menuItem.setChecked(true);
                        mDrawerLayout.closeDrawers();
                        return true;
                    }
                });

Однако моя проблема заключается в том, что только первые четыре пункта главного меню проверяются правильно, в то время как событие щелчка подменю также работает, но они не проверяются. Вместо этого предыдущее главное меню остается отмеченным.


person Azim Ansari    schedule 01.08.2015    source источник
comment
это проблема в библиотеке поддержки дизайна, проверьте это, code.google.com/ p/android/issues/detail?id=178709 , если вы все еще хотите это сделать, проверьте ответ stackoverflow.com/a /31047154/1168654   -  person Dhaval Parmar    schedule 01.08.2015
comment
Да, похоже, проблема в библиотеке поддержки. Но ссылка, которую вы предложили, не является хорошим решением, потому что она раздувает меню каждый раз, когда мы нажимаем на любой элемент. Так что я жду следующего выпуска библиотеки от Google   -  person Azim Ansari    schedule 01.08.2015


Ответы (2)


У меня была такая же проблема, но я только что заметил решение. Это не красиво, но работает для меня.

Не похоже, что отдельные группы с checkableBehavior="single" будут взаимодействовать, но они взаимодействуют. За раз проверяется только один элемент, но я также использую два меню. Проверь это:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group> 
    <item android:title="title">
        <menu>
            <group android:checkableBehavior="single">
                <item
                    android:id="@+id/navigation_item_1"
                    android:title="title"/>
                <item
                    android:id="@+id/navigation_item_2"
                    android:title="title"/> 
                <item
                    android:id="@+id/navigation_item_3"      
                    android:title="title"/>
            </group>
        </menu>
    </item>
    <item android:title="@string/title">
        <menu>
            <group android:checkableBehavior="single">
                <item
                    android:id="@+id/navigation_sub_item_1"
                    android:title="title"/> 
                <item
                    android:id="@+id/navigation_sub_item_2"
                    android:title="title"/>
            </group>
        </menu>
    </item>
</group>

But it doesn´t work with default xml state checked="true". In that case it doesn´t uncheck this item but check a second item in a single-checkable group. :D

person Typecastman    schedule 18.09.2015

Он действует с вашими подэлементами как один элемент и пытается выделить все это. Вы хотите выделить поведение как группу для подэлементов. Смотри ниже:

<menu xmlns:android="http://schemas.android.com/apk/res/android">

<group android:checkableBehavior="single">
    <item
        android:id="@+id/nav_home"
        android:icon="@drawable/ic_dashboard"
        android:title="Home" />
  <item
        android:id="@+id/nav_check"
        android:icon="@drawable/ic_cloud_queue_black_24dp"
        android:title="Check" />
</group>

<!-- Sub items -->

<item android:title="Other">
  <menu>
    <group android:checkableBehavior="single">
      <item
            android:id="@+id/nav_settings"
            android:icon="@drawable/ic_settings_white_24dp"
            android:title="settings" />
      <item
          android:icon="@drawable/ic_forum"
          android:title="forum" />
    </group>
  </menu>
</item>

person Wildcard    schedule 07.07.2016