2

我正在使用 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;
                    }
                });

但是我的问题是只有前四个主菜单项得到正确检查,而子菜单点击事件也有效,但没有得到检查。相反,以前的主菜单保持选中状态。

4

2 回答 2

4

我有同样的问题,但刚刚注意到一个解决方案。它不漂亮,但对我有用。

似乎带有 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>

但它不适用于默认的 xml 状态检查 =“真”。在这种情况下,它不会取消选中该项目,而是选中一个可单选组中的第二个项目。:D

于 2015-09-18T07:42:54.563 回答
2

它与您的子项目一起作为一个项目,并试图突出显示整个事物。您希望将单个行为作为子项的组。见下文:

<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>

于 2016-07-07T18:03:00.497 回答