web-dev-qa-db-ja.com

異なるグループ内で選択されたナビゲーションドロワーメニュー項目

ナビゲーションドロワーが機能していて、メニュー内でグループとヘッダーを使用すると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">_がブロック全体をカプセル化できることを読みましたが、それは機能していないようです。

何かご意見は?乾杯。

[〜#〜]編集[〜#〜]-メニュー構造のスクリーンショットを追加

enter image description here

14
Jammo

更新

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>

そしてここにスクリーンショットがあります

BNK's screenshot

更新の終わり


私がコメントしたように、外側のメニューの下に置くのではなく、設定と一般のメニューの下に<group Android:checkableBehavior="single">を置いてみてください。つまり、2つのグループがあります。お役に立てれば!

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

6
Fire Stork

ここでは、上、中央、下の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();
1
Android Team

これを試して:

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

グループタグを閉じるときの位置を変更します</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>
0
Vipin Kumar