J'ai un tiroir de navigation en état de fonctionnement et quelques problèmes avec menuItem.setChecked(true);
lors de l'utilisation de groupes et d'en-têtes dans le menu. Il ne met pas en évidence les éléments de menu comme prévu.
Voici mon 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>
Comme vous pouvez le voir, j'ai 3 éléments de menu, puis un groupe de paramètres avec 2 éléments de menu, puis un groupe général avec 3 éléments de menu.
Maintenant, avec les 3 premiers éléments de menu, la menuItem.setChecked(true);
fonctionne comme prévu et met en surbrillance cet élément de menu. Toutefois, aucun des éléments de menu suivants du sous-ensemble (sous-ensembles "Paramètres" ou "Général") n'est surligné correctement.
J'ai lu que le <group Android:checkableBehaviour="single">
peut encapsuler tout le bloc, mais cela ne semble pas fonctionner.
Des pensées? À votre santé.
EDIT- Ajout d'une capture d'écran de la structure du menu
Si vous avez mis à niveau votre Android Studio vers 1.4 , vous pouvez créer un nouveau projet (avec le modèle Navigation Drawer Activity
). Ensuite, vous pouvez mettre à jour votre fichier de menu comme suit (faites attention aux deux lignes <group Android:checkableBehavior="single">
dans 2 sous-menus à "Communiquer" et "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>
Et voici la capture d'écran
Comme je l'ai dit, essayez de placer <group Android:checkableBehavior="single">
sous les menus de Paramètres et Général au lieu de mettre en dessous du menu extérieur. Cela signifie que vous aurez 2 groupes. J'espère que cela t'aides!
<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>
ça marche pour moi: D
Ici, vous pouvez utiliser trois groupes différents: haut, centre et bas. Et le premier groupe du haut aura 3 éléments de menu comme vous avez. Ensuite, le groupe central peut être identique à votre menu "Paramètres" avec 2 éléments. Et le groupe du bas aura 2 éléments comme c'est le cas en général.
Et dans votre fichier Java, vous pouvez gérer l'élément sélectionné comme écouteur pour gérer l'élément et cliquer sur le menu de navigation.
// 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();
Essaye ça:
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;
}
Changez la position sur la balise de groupe de fermeture </group>
dans votre code comme suit
Regardez attentivement la position et faites-le.
<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>