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

时间:2015-11-05 17:59:10

标签: android navigationview android-support-design android-navigation-drawer

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

支持使用的库版本:

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 behavior属性。 lib或整个实现的错误应该突然以不同的方式完成?

1 个答案:

答案 0 :(得分:2)

NavigationView版本23完全改变了菜单构建方式的结构 - 它现在基于RecyclerView的评论中提到的release Google+ post

NavigationMenuPresenter's Adapter source code(控制菜单项的显示和存储方式),只显示一个选中的项目,并检查一个项目取消选中其他选中的项目。

这需要提交new bug report,以便NavigationView考虑checkableBehavior字段。