升级支持设计库后,导航抽屉中的多个复选框组停止工作
Multiple checkable groups in NavigationDrawer stopped working after upgrading support design library
我正在使用 NavigationView 向我的 NavigationDrawer 显示 menu.xml 数据。它有两组可检查项目。第一组可以同时检查任意数量的项目,第二组可以只检查一个。
使用的支持库版本:
compile 'com.android.support:appcompat-v7:22.2.1'
compile 'com.android.support:design:22.2.0'
xml 用于 NavigationView 的代码
<?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'
可检查的行为已更改。现在,当我多次单击同一个项目时,它会检查和取消选中自己,但是当我 select 一个不同的项目时,所有内容都会取消选中,只有在再次单击同一项目后,它才会被选中。
看了这两个版本的源码,也没明白是什么问题。看起来有点像新版本完全没有考虑这个chackable behavior属性。库或整个实现的错误应该突然不同地完成吗?
NavigationView
的第 23 版完全改变了菜单构建的结构 - 它现在基于 RecyclerView as mentioned in the comments of the release Google+ post。
从 NavigationMenuPresenter's Adapter source code(控制菜单项的显示和存储方式)看来,似乎只保存了一个选中的项目,选中一个项目会取消选中其他选中的项目。
这需要提交 new bug report 以获得 NavigationView
以考虑 checkableBehavior
字段。
我正在使用 NavigationView 向我的 NavigationDrawer 显示 menu.xml 数据。它有两组可检查项目。第一组可以同时检查任意数量的项目,第二组可以只检查一个。
使用的支持库版本:
compile 'com.android.support:appcompat-v7:22.2.1'
compile 'com.android.support:design:22.2.0'
xml 用于 NavigationView 的代码
<?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'
可检查的行为已更改。现在,当我多次单击同一个项目时,它会检查和取消选中自己,但是当我 select 一个不同的项目时,所有内容都会取消选中,只有在再次单击同一项目后,它才会被选中。 看了这两个版本的源码,也没明白是什么问题。看起来有点像新版本完全没有考虑这个chackable behavior属性。库或整个实现的错误应该突然不同地完成吗?
NavigationView
的第 23 版完全改变了菜单构建的结构 - 它现在基于 RecyclerView as mentioned in the comments of the release Google+ post。
从 NavigationMenuPresenter's Adapter source code(控制菜单项的显示和存储方式)看来,似乎只保存了一个选中的项目,选中一个项目会取消选中其他选中的项目。
这需要提交 new bug report 以获得 NavigationView
以考虑 checkableBehavior
字段。