ナビゲーションドロワーが機能していて、メニュー内でグループとヘッダーを使用すると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);
が期待どおりに機能し、そのメニュー項目が強調表示されます。ただし、サブセット内の次のメニュー項目(「設定」または「一般」サブセット)はどれも正しく強調表示されていません。
_<group Android:checkableBehaviour="single">
_がブロック全体をカプセル化できることを読みましたが、それは機能していないようです。
何かご意見は?乾杯。
[〜#〜]編集[〜#〜]-メニュー構造のスクリーンショットを追加
Android Studioを1.4にアップグレードした場合は、Navigation Drawer Activity
を使用して新しいプロジェクトを作成できます次に、メニューファイルを次のように更新できます("Communicate"および"BNK"の2つのサブメニュー内の2行の<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>
そしてここにスクリーンショットがあります
私がコメントしたように、外側のメニューの下に置くのではなく、設定と一般のメニューの下に<group Android:checkableBehavior="single">
を置いてみてください。つまり、2つのグループがあります。お役に立てれば!
<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
ここでは、上、中央、下の3つの異なるグループを使用できます。そして、最初のトップグループには、あなたと同じように3つのメニュー項目があります。次に、中央のグループは、2つの項目を持つ「設定」メニューと同じにすることができます。そして、一番下のグループは、一般的なように2つのアイテムがあります。
また、Javaファイルでは、アイテム選択リスナーを処理して、ナビゲーションメニューのアイテムクリックを処理できます。
// 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>