我最近开始转换我的
Android应用程序以使用名为support:design的最新支持库.
在实现新的NavigationView时,我偶然发现了显示所选菜单项的问题.
我的navdrawer_menu.xml
- <menu xmlns:android="http://schemas.android.com/apk/res/android">
- <group android:checkableBehavior="single">
- <item
- android:id="@+id/navigation_item_home"
- android:icon="@drawable/ic_home_black"
- android:title="@string/navdrawer_item_home" />
- </group>
- <item
- android:id="@+id/navigation_subheader"
- android:title="@string/navdrawer_subheader_title1">
- <menu>
- <group android:checkableBehavior="single">
- <item
- android:id="@+id/navigation_sub_item1"
- android:icon="@drawable/ic_home_black"
- android:title="@string/navdrawer_sub_item1" />
- </group>
- </menu>
- </item>
- </menu>
接下来,我将菜单项设置为onNavigationItemSelected:
- @Override
- public boolean onNavigationItemSelected(final MenuItem menuItem) {
- menuItem.setChecked(true);
- drawerLayout.closeDrawer(GravityCompat.START);
- mDrawerActionHandler.postDelayed(new Runnable() {
- @Override
- public void run() {
- displayView(menuItem.getItemId());
- }
- },DRAWER_CLOSE_DELAY_MS);
- return true;
- }
如果我只在标签之间使用普通菜单项,但这对于子标题不起作用,那么这种方法很有用.点击子项目不会设置它们检查,直到我点击相同的项目两次,它不会取消选中之前检查的任何项目.
最终看起来像这样:
解决方法
每个项目都必须在一个组内,因此该组可以控制该项目在用户选择时的视觉行为.试试吧:
- <menu xmlns:android="http://schemas.android.com/apk/res/android">
- <group android:checkableBehavior="single">
- <item
- android:id="@+id/navigation_item_home"
- android:icon="@drawable/ic_home_black"
- android:title="@string/navdrawer_item_home" />
- <item
- android:id="@+id/navigation_subheader"
- android:title="@string/navdrawer_subheader_title1">
- <menu>
- <group android:checkableBehavior="single">
- <item
- android:id="@+id/navigation_sub_item1"
- android:icon="@drawable/ic_home_black"
- android:title="@string/navdrawer_sub_item1" />
- </group>
- </menu>
- </item>
- </group>
- </menu>