Java 在不同组中选择的导航抽屉菜单项
我有一个可用的导航抽屉,在Java 在不同组中选择的导航抽屉菜单项,java,android,android-fragments,navigation-drawer,android-menu,Java,Android,Android Fragments,Navigation Drawer,Android Menu,我有一个可用的导航抽屉,在menuItem.setChecked(true)方面有一些问题在菜单中使用组和标题时。它没有按预期突出显示菜单项 以下是我的XML: <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" tools:context=".ActivityMap"> <grou
menuItem.setChecked(true)方面有一些问题代码>在菜单中使用组和标题时。它没有按预期突出显示菜单项
以下是我的XML:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".ActivityMap">
<group android:checkableBehavior="single">
<item
android:id="@+id/nav_welcome"
android:icon="@drawable/abc_btn_check_to_on_mtrl_000"
android:title="Welcome" />
<item
android:id="@+id/nav_map_showmap"
android:icon="@mipmap/ic_map_black_24dp"
android:title="Show Map" />
<item
android:icon="@mipmap/ic_list_black_24dp"
android:title="Show List" />
<item android:title="Settings">
<menu>
<item
android:id="@+id/nav_database_check"
android:icon="@mipmap/ic_cloud_done_black_24dp"
android:title="Update Database" />
<item
android:id="@+id/nav_map_settings"
android:icon="@mipmap/ic_settings_black_24dp"
android:title="App Preferences" />
</menu>
</item>
<item android:title="General">
<menu>
<item
android:id="@+id/nav_general_about"
android:icon="@mipmap/ic_info_black_24dp"
android:title="About" />
<item
android:id="@+id/nav_general_help"
android:icon="@mipmap/ic_help_black_24dp"
android:title="Help" />
<item
android:id="@+id/nav_general_report"
android:icon="@mipmap/ic_email_black_24dp"
android:title="Feedback / Report error" />
</menu>
</item>
</group>
</menu>
如您所见,我有3个菜单项,然后是一个包含2个菜单项的设置组,然后是一个包含3个菜单项的常规组
现在,对于前3个菜单项,menuItem.setChecked(true)代码>按预期工作,并突出显示该菜单项。但是,子集中的以下菜单项(“设置”或“常规”子集中)均未正确高亮显示
我读到
可以封装整个块,但这似乎不起作用
有什么想法吗?干杯
编辑-添加菜单结构的屏幕截图
在这里,您可以使用三个不同的组:顶部、中间和底部。第一组将有3个菜单项。然后,中心组可以与您的“设置”菜单相同,共有2项。和底部组将有2个项目,因为它是在一般情况下
在java文件中,您可以处理Item Selected Listener以处理导航菜单中的项目单击
// This method will trigger on item Click of navigation menu
@Override
public boolean onNavigationItemSelected(MenuItem p_menuItem) {
//Checking if the item is in checked state or not, if not make it in checked state
if(p_menuItem.getGroupId()==R.id.menu_top){
m_navigationView.getMenu().setGroupCheckable(R.id.menu_bottom,false,true);
m_navigationView.getMenu().setGroupCheckable(R.id.menu_center,false,true);
m_navigationView.getMenu().setGroupCheckable(R.id.menu_top,true,true);
}
else if(p_menuItem.getGroupId()==R.id.menu_center){
m_navigationView.getMenu().setGroupCheckable(R.id.menu_bottom,false,true);
m_navigationView.getMenu().setGroupCheckable(R.id.menu_center,true,true);
m_navigationView.getMenu().setGroupCheckable(R.id.menu_top,false,true);
}
else{
m_navigationView.getMenu().setGroupCheckable(R.id.menu_bottom,true,true);
m_navigationView.getMenu().setGroupCheckable(R.id.menu_center,false,true);
m_navigationView.getMenu().setGroupCheckable(R.id.menu_top,false,true);
}
p_menuItem.setChecked(true);
m_drawerLayout.closeDrawers();
更新
如果您已将Android Studio升级到1.4,则可以创建一个新项目(使用导航抽屉活动
模板)。然后,您可以按以下方式更新菜单文件(注意“通信”和“BNK”两个子菜单中的两行代码):
这是截图
更新结束
正如我所评论的,请尝试将
放在设置和常规菜单下方,而不是放在外部菜单下方。这意味着你将有两个小组。希望这有帮助 试试这个:
private int selectedItem = 0;
private void setSelectedItem(MenuItem menuItem, int position) {
mNavigationView.getMenu().getItem(selectedItem).setChecked(false);
mNavigationView.getMenu().getItem(position).setChecked(true);
if (menuItem.getGroupId() == R.id.group_2) {
mNavigationView.getMenu().setGroupCheckable(R.id.group_1, false, true);
mNavigationView.getMenu().setGroupCheckable(R.id.group_2, true, true);
} else {
mNavigationView.getMenu().setGroupCheckable(R.id.group_1, true, true);
mNavigationView.getMenu().setGroupCheckable(R.id.group_2, false, true);
}
//Update highlighted item in the navigation menu
menuItem.setChecked(true);
selectedItem = position;
}
在代码中更改关闭组标记
的位置,如下所示:
仔细观察这个位置,然后去做
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".ActivityMap">
<group android:checkableBehavior="single">
<item
android:id="@+id/nav_welcome"
android:icon="@drawable/abc_btn_check_to_on_mtrl_000"
android:title="Welcome" />
<item
android:id="@+id/nav_map_showmap"
android:icon="@mipmap/ic_map_black_24dp"
android:title="Show Map" />
<item
android:icon="@mipmap/ic_list_black_24dp"
android:title="Show List" />
</group>
<item android:title="Settings">
<menu>
<item
android:id="@+id/nav_database_check"
android:icon="@mipmap/ic_cloud_done_black_24dp"
android:title="Update Database" />
<item
android:id="@+id/nav_map_settings"
android:icon="@mipmap/ic_settings_black_24dp"
android:title="App Preferences" />
</menu>
</item>
<item android:title="General">
<menu>
<item
android:id="@+id/nav_general_about"
android:icon="@mipmap/ic_info_black_24dp"
android:title="About" />
<item
android:id="@+id/nav_general_help"
android:icon="@mipmap/ic_help_black_24dp"
android:title="Help" />
<item
android:id="@+id/nav_general_report"
android:icon="@mipmap/ic_email_black_24dp"
android:title="Feedback / Report error" />
</menu>
</item>
</menu>
这对我来说是可行的:D对于一个简单易懂的小UI来说,这看起来非常混乱?我的XML停止了setChecked()
的正常工作,这没有什么问题吗?我认为在这种情况下需要setChecked进行更新吗?仍在寻找解决方案能否发布屏幕截图以获得更多澄清?也许您的问题与设置和常规菜单相同,并尝试将“”放在设置和常规菜单下方,而不是外部菜单,如我之前评论中的第二个链接所示。但是,子集(“设置”或“常规”子集)中没有以下菜单项突出显示正确。
他们在做什么?他们应该做什么?我已经试过了,但是,使用多个
可以创建多个可选部分。因此,它们变为高亮显示,但我有3个部分可以单独高亮显示(即,同时有3个高亮显示的部分)。我认为您可以手动设置代码未高亮显示的其他部分。在我的一个项目中,我的navi抽屉使用listview项而不是菜单项,我使用该逻辑设置高亮显示背景,在DroperItemClickListener:-)中,类似于前面的响应。以编程方式在代码中这样做似乎很混乱,而不是依赖XML的行为?您尝试过我的答案吗?这对我也很有效,缺少的部分是一个带有checkableBehavior=“single”的嵌套组。我认为应该只有一个组,因为一个子组可能有自己的检查项,但事实并非如此。
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".ActivityMap">
<group android:checkableBehavior="single">
<item
android:id="@+id/nav_welcome"
android:icon="@drawable/abc_btn_check_to_on_mtrl_000"
android:title="Welcome" />
<item
android:id="@+id/nav_map_showmap"
android:icon="@mipmap/ic_map_black_24dp"
android:title="Show Map" />
<item
android:icon="@mipmap/ic_list_black_24dp"
android:title="Show List" />
</group>
<item android:title="Settings">
<menu>
<item
android:id="@+id/nav_database_check"
android:icon="@mipmap/ic_cloud_done_black_24dp"
android:title="Update Database" />
<item
android:id="@+id/nav_map_settings"
android:icon="@mipmap/ic_settings_black_24dp"
android:title="App Preferences" />
</menu>
</item>
<item android:title="General">
<menu>
<item
android:id="@+id/nav_general_about"
android:icon="@mipmap/ic_info_black_24dp"
android:title="About" />
<item
android:id="@+id/nav_general_help"
android:icon="@mipmap/ic_help_black_24dp"
android:title="Help" />
<item
android:id="@+id/nav_general_report"
android:icon="@mipmap/ic_email_black_24dp"
android:title="Feedback / Report error" />
</menu>
</item>
</menu>
<group android:checkableBehavior="single">
<item
android:id="@+id/nav_vi_tri"
android:icon="@drawable/ic_menu_camera"
android:title="Vị trí" />
<item
android:id="@+id/nav_xem_lai"
android:icon="@drawable/ic_menu_gallery"
android:title="Xem lại hành trình" />
<item
android:id="@+id/nav_hinh_anh"
android:icon="@drawable/ic_menu_slideshow"
android:title="Hình ảnh" />
<item android:title="Báo cáo">
<menu>
<group android:checkableBehavior="single">
<item
android:id="@+id/nav_baocao1"
android:icon="@drawable/ic_menu_camera"
android:title="Hành trình xe chạy" />
<item
android:id="@+id/nav_baocao2"
android:icon="@drawable/ic_menu_gallery"
android:title="Tốc độ của xe" />
<item
android:id="@+id/nav_baocao3"
android:icon="@drawable/ic_menu_slideshow"
android:title="Quá tốc độ" />
<item
android:id="@+id/nav_baocao4"
android:icon="@drawable/ic_menu_slideshow"
android:title="Thời gian lái" />
<item
android:id="@+id/nav_baocao5"
android:icon="@drawable/ic_menu_slideshow"
android:title="Dừng đỗ" />
<item
android:id="@+id/nav_baocao6"
android:icon="@drawable/ic_menu_slideshow"
android:title="Tổng hợp theo xe" />
<item
android:id="@+id/nav_baocao7"
android:icon="@drawable/ic_menu_slideshow"
android:title="Quãng đường nhiên liệu" />
</group>
</menu>
</item>
<item android:title="Communicate">
<menu>
<group android:checkableBehavior="single">
<item
android:id="@+id/nav_tien_ich"
android:icon="@drawable/ic_menu_share"
android:title="Tiện ích" />
<item
android:id="@+id/nav_logout"
android:icon="@drawable/ic_menu_send"
android:title="Đăng xuất" />
</group>
</menu>
</item>
</group>