Jam*_*mmo 14 java android android-menu android-fragments navigation-drawer
我有一个工作的导航抽屉,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>
Run Code Online (Sandbox Code Playgroud)
如您所见,我有3个菜单项,然后是包含2个菜单项的设置组,然后是包含3个菜单项的通用组.
现在使用前3个菜单项,menuItem.setChecked(true);按预期工作,并突出显示该菜单项.但是,子集("设置"或"常规"子集)中的以下菜单项均未正确突出显示.
我读到<group android:checkableBehaviour="single">可以封装整个块,但这似乎不起作用.
有什么想法吗?干杯.
编辑 - 添加了菜单结构的屏幕截图
BNK*_*BNK 21
如果您已将Android Studio升级到1.4,则可以创建一个新项目(带有Navigation Drawer Activity模板).然后,您可以按如下方式更新菜单文件(注意"Communicate"和"BNK"中<group android:checkableBehavior="single"> 2个子菜单中的两行):
<?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>
Run Code Online (Sandbox Code Playgroud)
这是截图
正如我所评论的那样,请尝试将<group android:checkableBehavior="single">设置和常规菜单放在下面,而不是放在外面的菜单下面.这意味着你将有2组.希望这可以帮助!
小智 6
<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>
Run Code Online (Sandbox Code Playgroud)
它为我工作:D
小智 1
在这里您可以使用三个不同的组 top 、 center 和 Bottom 。第一个顶部组将有 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();
Run Code Online (Sandbox Code Playgroud)