java 在不同组中选择的导航抽屉菜单项

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/32695710/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-11-02 20:37:47  来源:igfitidea点击:

Navigation Drawer menu items selected within different groups

javaandroidandroid-fragmentsnavigation-drawerandroid-menu

提问by Jammo

I have a working Navigation Drawer and having some issues with menuItem.setChecked(true);when using groups and headers within the menu. It's not highlighting menu items as expected.

我有一个可用的导航抽屉,但menuItem.setChecked(true);在菜单中使用组和标题时遇到了一些问题。它没有按预期突出显示菜单项。

Here is my XML:

这是我的 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>

As you can see I have 3 menu items, then a Settings Group with 2 menu items, then a General Group with 3 menu items.

如您所见,我有 3 个菜单项,然后是具有 2 个菜单项的设置组,然后是具有 3 个菜单项的常规组。

Now with the first 3 menu items, the menuItem.setChecked(true);is working as expected, and highlighting that menu item. However, none of the following menu items within the subset ("Settings" or "General" subsets) are highlighting correctly.

现在使用前 3 个菜单项,menuItem.setChecked(true);按预期工作,并突出显示该菜单项。但是,子集中的以下菜单项(“设置”或“常规”子集)均未正确突出显示。

I read that the <group android:checkableBehaviour="single">can encapsulate the whole block, but that doesn't seem to be working.

我读到<group android:checkableBehaviour="single">可以封装整个块,但这似乎不起作用。

Any thoughts? Cheers.

有什么想法吗?干杯。

EDIT- Added Screenshot of the menu structure

编辑- 添加了菜单结构的屏幕截图

enter image description here

在此处输入图片说明

回答by BNK

UPDATE

更新

If you have upgraded your Android Studio to 1.4, you can create a new project (with Navigation Drawer Activitytemplate). Then, you can update your menu file as the following (pay attention to the two lines <group android:checkableBehavior="single">inside 2 sub-menus at "Communicate"and "BNK"):

如果您已将 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>

And here is the screenshot

这是截图

BNK's screenshot

BNK的截图

END OF UPDATE

更新结束



As I have commented, please try putting <group android:checkableBehavior="single">below menus of Settings and General instead of putting below the outside menu. That means you will have 2 groups. Hope this helps!

正如我所评论的,请尝试将<group android:checkableBehavior="single">“设置”和“常规”菜单置于下方,而不是置于外部菜单下方。这意味着您将有 2 个组。希望这可以帮助!

回答by Fire Stork

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

it work for me :D

它对我有用:D

回答by Android Team

Here you can use three different groups top , center and bottom. And first top group will have 3 menu items as you have . Then the center group can be same as your "Settings" menu with 2 items. And bottom group will have 2 items as it is in General.

在这里您可以使用三个不同的组 top 、 center 和 bottom 。第一个顶级组将有 3 个菜单项。然后中心组可以与您的“设置”菜单相同,有 2 个项目。和底部组将有 2 个项目,因为它是一般的。

And in your java file you can handle Item Selected Listener to handle the item click of the navigation menu.

并且在您的 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();

回答by KishuDroid

Try this:

试试这个:

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

回答by Vipin Kumar

Change the position on closing group tag </group>in your code as under:

更改代码</group>中关闭组标签的位置,如下所示:

Look the position carefully and do it.

仔细看位置,然后去做。

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