Элементы меню «Ящик навигации», выбранные в разных группах

У меня есть рабочий ящик навигации и некоторые проблемы с 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 пункта меню, затем группа настроек с двумя пунктами меню, а затем общая группа с 3 пунктами меню.

Теперь с первыми тремя пунктами меню, menuItem.setChecked(true); Работает как ожидалось, и выделяет этот пункт меню. Однако ни один из следующих пунктов меню в подмножестве (подстановки «Настройки» или «Общие») не выделяется правильно.

Я прочитал, что <group android:checkableBehaviour="single"> может инкапсулировать весь блок, но это, похоже, не работает.

Есть предположения? Приветствия.

EDIT – Добавлен скриншот структуры меню

Введите описание изображения здесь

Solutions Collecting From Web of "Элементы меню «Ящик навигации», выбранные в разных группах"

ОБНОВИТЬ

Если вы обновили свой Android Studio до версии 1.4 , вы можете создать новый проект (с шаблоном Navigation Drawer Activity ). Затем вы можете обновить свой файл меню следующим образом (обратите внимание на две строки <group android:checkableBehavior="single"> внутри 2 подменю в «Общайтесь» и «BNK» ):

 <?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> 

И вот скриншот

Снимок экрана BNK

КОНЕЦ ОБНОВЛЕНИЯ


Как я уже прокомментировал, попробуйте помещать <group android:checkableBehavior="single"> ниже меню «Настройки» и «Общие» вместо того, чтобы <group android:checkableBehavior="single"> ниже внешнего меню. Это означает, что у вас будет 2 группы. Надеюсь это поможет!

Здесь вы можете использовать три разные группы сверху, в центре и внизу. И первая верхняя группа будет иметь 3 пункта меню, как и у вас. Тогда центральная группа может быть такой же, как и в меню «Настройки» с двумя элементами. И нижняя группа будет иметь 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(); 

Попробуй это:

  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; } 

Измените позицию в теге закрывающей группы </group> в коде:

Внимательно посмотрите на позицию и сделайте это.

 <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> 

Это работает для меня: D