如何改变抽屉中物品的焦点?

问题描述 投票:0回答:3

我有一个使用抽屉布局的应用程序。例如:

在这里,当我单击图库时,就会打开一个新的活动。现在,当我关闭该活动时,焦点也出现在图库项目上,我想将焦点从图库项目更改为抽屉选项中的其他项目。我怎样才能做到这一点?

我使用以下代码来显示项目列表:

<?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_camera"
            android:icon="@drawable/ic_menu_camera"
            android:title="Import" />
        <item
            android:id="@+id/nav_gallery"
            android:icon="@drawable/ic_menu_gallery"
            android:title="Gallery" />
        <item
            android:id="@+id/nav_slideshow"
            android:icon="@drawable/ic_menu_slideshow"
            android:title="Slideshow" />
        <item
            android:id="@+id/nav_manage"
            android:icon="@drawable/ic_menu_manage"
            android:title="Tools" />
    </group>

    <item android:title="Communicate">
        <menu>
            <item
                android:id="@+id/nav_share"
                android:icon="@drawable/ic_menu_share"
                android:title="Share" />
            <item
                android:id="@+id/nav_send"
                android:icon="@drawable/ic_menu_send"
                android:title="Send" />
        </menu>
    </item>

</menu>

所以我没有任何线索将焦点改回到导入项。请帮忙

android navigation-drawer
3个回答
1
投票

下面的代码使您的抽屉项目取消选中,就像原样一样,如果您愿意,您可以添加另一个来选中其他项目

了解更多详细信息 - 在此处输入链接描述

findNavController().addOnDestinationChangedListener{_,destination,_ ->
        if (destination.id ==R.id.storageFolderFragment){
            navView.menu.findItem(R.id.storageFolderFragment).isCheckable = false
        }
        if (destination.id ==R.id.categoryDownloadFragment){
            navView.menu.findItem(R.id.categoryDownloadFragment).isCheckable = false
        }
    }

0
投票

我知道已经过去很长时间了,但我想展示什么对我有用。万一它对某人有用。

首先记住要实例化

navController

val navHostFragment = supportFragmentManager.findFragmentById(R.id.fragmentContainerView) as NavHostFragment
val navController = navHostFragment.navController

然后捕获目的地更改事件并使用 navigationView 的

setCheckedItem
方法,如下所示:

navController.addOnDestinationChangedListener { _, destination, _ ->

        when(destination.id){
            R.id.fragHome -> binding.navigationView.setCheckedItem(R.id.nav_home)
            R.id.fragSettings -> binding.navigationView.setCheckedItem(R.id.nav_settings)
            R.id.fragAbout -> binding.navigationView.setCheckedItem(R.id.nav_about)
        }

    }

希望我对你有帮助


0
投票

您可以将 checkable="false" 添加到所有您不想获得焦点的项目

示例->

    <item
        android:icon="@drawable/ic_search"
        android:id="@+id/nav_search_apps"
        android:checkable="false"
        android:title="Search Apps"/>

我们也可以通过编程来完成此操作

    navView.menu.findItem(R.id.nav_search_apps).isCheckable = false
© www.soinside.com 2019 - 2024. All rights reserved.