我能';无法在Android导航抽屉中选择显示多个项目
我正在为本地公交系统构建一个Android应用程序,并尝试使用导航抽屉作为地图上显示的路线的过滤器。功能就在那里,但我正在努力使用UI。每当我单击一个项目时,其他所有内容都设置为未选中,这不是我想要的。我一直在试图找到解决这个问题的办法,但没有想出任何办法。以下是导航抽屉的代码: 主要活动:我能';无法在Android导航抽屉中选择显示多个项目,android,Android,我正在为本地公交系统构建一个Android应用程序,并尝试使用导航抽屉作为地图上显示的路线的过滤器。功能就在那里,但我正在努力使用UI。每当我单击一个项目时,其他所有内容都设置为未选中,这不是我想要的。我一直在试图找到解决这个问题的办法,但没有想出任何办法。以下是导航抽屉的代码: 主要活动: mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); Toolbar toolbar = (Toolbar) findVi
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
// listen for navigation events
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
// set up the hamburger icon to open and close the drawer
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, toolbar, R.string.navigation_drawer_open,
R.string.navigation_drawer_close);
mDrawerLayout.setDrawerListener(mDrawerToggle);
mDrawerToggle.syncState();
@Override
public boolean onNavigationItemSelected(final MenuItem menuItem) {
final boolean enable;
//update highlighted item in the navigation menu
//menuItem.setChecked(!menuItem.isChecked());
if(menuItem.isChecked()){
menuItem.setChecked(false);
enable = false;
}
else{
menuItem.setChecked(true);
enable=true;
}
//menuItem.setChecked(true);
mNavItemId = menuItem.getItemId();
// allow some time after closing the drawer before performing real navigation
// so the user can see what is happening
// mDrawerLayout.closeDrawer(GravityCompat.START);
mDrawerActionHandler.postDelayed(new Runnable() {
@Override
public void run() {
navigate(menuItem.getItemId(),enable);
}
}, DRAWER_CLOSE_DELAY_MS);
return true;
}
和布局文件:
<item
android:id="@+id/filter_routes"
android:title="@string/filter">
<menu>
<group android:checkableBehavior="all">
<item
android:id="@+id/red_route"
android:title="@string/red_route"
android:checkMark="?android:attr/listChoiceIndicatorMultiple"
android:icon="@drawable/abc_btn_check_material"
android:checked="true"
android:checkable="true"/>
<item
android:id="@+id/blue_route"
android:title="@string/blue_route"
android:icon="@drawable/abc_btn_check_material"
android:checkMark="?android:attr/listChoiceIndicatorMultiple"
android:checked="true"
android:checkable="true"/>
<item
android:id="@+id/green_route"
android:title="@string/green_route"
android:icon="@drawable/abc_btn_check_material"
android:checkMark="?android:attr/listChoiceIndicatorMultiple"
android:checked="true"
android:checkable="true"/>
<item
android:id="@+id/orange_route"
android:title="@string/orange_route"
android:icon="@drawable/abc_btn_check_material"
android:checkMark="?android:attr/listChoiceIndicatorMultiple"
android:checked="true"
android:checkable="true"/>
<item
android:id="@+id/brown_route"
android:title="@string/brown_route"
android:icon="@drawable/abc_btn_check_material"
android:checkMark="?android:attr/listChoiceIndicatorMultiple"
android:checked="true"
android:checkable="true"/>
</group>
</menu>
</item>
通过从onNavigationItemSelected()返回false,我获得了多个工作选项。从Google文档中获取onNavigationItemSelected()的返回值: 布尔值为true,将项目显示为选定项目 显然,这意味着返回false会将项选择留在控件中 这里有一个例子 XML:
我提交了关于这件事的报告,并按计划关闭了它。谷歌显然让
NavigationView
使用菜单XML,但无意让它像菜单一样工作。你解决了这个问题吗?我也有同样的问题,几乎所有的搜索结果都是如何单个检查项目。我放弃了这个,实现了一个弹出对话框的解决方案。
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:title="All">
<menu>
<group
android:checkableBehavior="all"
android:id="@+id/checkable_group"
>
<item
android:id="@+id/checkable_item_1"
android:title="A" />
<item
android:id="@+id/checkable_item_2"
android:title="B" />
<item
android:id="@+id/checkable_item_3"
android:title="C" />
<item
android:id="@+id/checkable_item_4"
android:title="D" />
</group>
</menu>
</item>
</menu>
@Override
public boolean onNavigationItemSelected(MenuItem item) {
if (item.isChecked()) {
item.setChecked(false);
}
else {
item.setChecked(true);
}
return false; // VERY Important to return false here
}