NavigationDrawer中的多个可检查组在升级支持设计库后停止工作



我正在使用NavigationView向我的NavigationDrawer显示menu.xml数据。它有两组可检查的项目。第一组可以同时检查任意数量的项目,第二组可以只检查一个。

使用的支持库版本:

compile 'com.android.support:appcompat-v7:22.2.1'
compile 'com.android.support:design:22.2.0'

用于NavigationView 的xml代码

<?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">
<group android:checkableBehavior="all" android:id="@+id/navgroup_layers" android:menuCategory="container">
    <item
        android:id="@+id/nav_traffic"
        android:checked="true"
        android:icon="@drawable/ic_traffic_light"
        android:title="@string/Traffic"/>
    <item
        android:id="@+id/nav_text"
        android:checked="true"
        android:icon="@drawable/ic_tooltip_text"
        android:title="@string/text_labels"/>
</group>
<group android:id="@+id/navgroup_cities"
       android:checkableBehavior="single"
       android:menuCategory="container"
    >
    <item
        android:id="@+id/nav_berlin"
        android:checked="true"
        android:icon="@drawable/ic_traffic_light"
        android:title="@string/berlin"/>
    <item
    android:id="@+id/nav_prague"
    android:icon="@drawable/ic_subway"
    android:checked="false"
    android:title="@string/prague"/>
    <item
        android:id="@+id/nav_paris"
        android:checked="false"
        android:icon="@drawable/ic_tooltip_text"
        android:title="@string/paris"/>
</group>

在我将库升级到最新版本后:

compile 'com.android.support:appcompat-v7:23.1.0'
compile 'com.android.support:design:23.1.0'

可检查的行为已更改。现在,当我多次单击同一个项目时,它会检查和取消检查自己,但当我选择不同的项目时,所有内容都会被取消检查,只有在再次单击同一项目后,它才会被检查。看了两个版本的源代码后,我没有意识到问题出在哪里。看起来这个chackable行为属性在新版本中根本没有被考虑。lib的一个bug或整个实现应该突然采取不同的做法吗?

NavigationView的第23版确实完全改变了菜单的构建结构——正如Google+发布的帖子中所提到的,它现在基于RecyclerView。

从NavigationMenuPresenter的适配器源代码(控制菜单项的显示和存储方式)中,似乎只保存了一个选中的项,选中一个项会取消选中其他选中项。

这将需要提交一个新的错误报告,以使NavigationView考虑到checkableBehavior字段。

相关内容

  • 没有找到相关文章

最新更新