[英]Navigation Drawer menu items selected within different groups
I have a working Navigation Drawer and having some issues with menuItem.setChecked(true);
我的导航抽屉正常工作,并且
menuItem.setChecked(true);
出现了一些问题menuItem.setChecked(true);
when using groups and headers within the menu. 在菜单中使用组和标题时。 It's not highlighting menu items as expected.
它没有按预期突出显示菜单项。
Here is my XML: 这是我的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>
As you can see I have 3 menu items, then a Settings Group with 2 menu items, then a General Group with 3 menu items. 如您所见,我有3个菜单项,然后是具有2个菜单项的“设置组”,然后是具有3个菜单项的“常规”组。
Now with the first 3 menu items, the menuItem.setChecked(true);
现在有了前三个菜单项,
menuItem.setChecked(true);
is working as expected, and highlighting that menu item. 正在按预期工作,并突出显示该菜单项。 However, none of the following menu items within the subset ("Settings" or "General" subsets) are highlighting correctly.
但是,子集中的以下菜单项(“设置”或“常规”子集)均未正确突出显示。
I read that the <group android:checkableBehaviour="single">
can encapsulate the whole block, but that doesn't seem to be working. 我读到
<group android:checkableBehaviour="single">
可以封装整个块,但这似乎行不通。
Any thoughts? 有什么想法吗? Cheers.
干杯。
EDIT - Added Screenshot of the menu structure 编辑 -添加了菜单结构的屏幕截图
If you have upgraded your Android Studio to 1.4 , you can create a new project (with Navigation Drawer Activity
template). 如果您已将Android Studio升级到1.4 ,则可以创建一个新项目(带有“
Navigation Drawer Activity
模板)。 Then, you can update your menu file as the following (pay attention to the two lines <group android:checkableBehavior="single">
inside 2 sub-menus at "Communicate" and "BNK" ): 然后,您可以按以下方式更新菜单文件(请注意“ Communicate”和“ BNK”两个子菜单中的两行
<group android:checkableBehavior="single">
):
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:checkableBehavior="single">
<item android:id="@+id/nav_camara" android:icon="@android:drawable/ic_menu_camera"
android:title="Import" />
<item android:id="@+id/nav_gallery" android:icon="@android:drawable/ic_menu_gallery"
android:title="Gallery" />
<item android:id="@+id/nav_slideshow" android:icon="@android:drawable/ic_menu_slideshow"
android:title="Slideshow" />
<item android:id="@+id/nav_manage" android:icon="@android:drawable/ic_menu_manage"
android:title="Tools" />
</group>
<item android:title="Communicate">
<menu>
<group android:checkableBehavior="single">
<item android:id="@+id/nav_share" android:icon="@android:drawable/ic_menu_share"
android:title="Share" />
<item android:id="@+id/nav_send" android:icon="@android:drawable/ic_menu_send"
android:title="Send" />
</group>
</menu>
</item>
<item android:title="BNK">
<menu>
<group android:checkableBehavior="single">
<item android:id="@+id/nav_share_bnk" android:icon="@android:drawable/ic_menu_share"
android:title="Share BNK" />
<item android:id="@+id/nav_send_bnk" android:icon="@android:drawable/ic_menu_send"
android:title="Send BNK" />
</group>
</menu>
</item>
</menu>
And here is the screenshot 这是屏幕截图
As I have commented, please try putting <group android:checkableBehavior="single">
below menus of Settings and General instead of putting below the outside menu. 如我所评论,请尝试将
<group android:checkableBehavior="single">
放在“设置”和“常规<group android:checkableBehavior="single">
菜单下,而不是放在外部菜单下。 That means you will have 2 groups. 这意味着您将有2个群组。 Hope this helps!
希望这可以帮助!
<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>
it work for me :D 它为我工作:D
Here you can use three different groups top , center and bottom. 在这里,您可以使用top,center和bottom三个不同的组。 And first top group will have 3 menu items as you have .
和第一个顶层组一样,您将拥有3个菜单项。 Then the center group can be same as your "Settings" menu with 2 items.
然后,中心组可以与包含两个项目的“设置”菜单相同。 And bottom group will have 2 items as it is in General.
最底层的组通常有2个项目。
And in your java file you can handle Item Selected Listener to handle the item click of the navigation menu. 在您的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();
Try this: 尝试这个:
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;
}
Change the position on closing group tag </group>
in your code as under: 更改代码中封闭组标记
</group>
的位置,如下所示:
Look the position carefully and do it. 仔细看一下姿势并做。
<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>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.