导航到其他片段、切换到其他菜单并切换回初始菜单后未选择 BottomNavigationView 的菜单

BottomNavigationView's menu not selected after navigating to other fragment, switching to other menu, and switching back to initial menu

我正在使用底部导航构建一个具有 3 个菜单的 android 应用程序。我在 Android Studio 中使用底部导航 Activity.

创建了新项目

我将片段重命名为:InfoFragment.ktDetectFragment.ktAboutFragment.kt
src/main/res/layout 中的布局重命名为 fragment_info.xmlfragment_detect.xmlfragment_about.xml
src/main/res/menu 中的菜单重命名为 navigation_infonavigation_detectnavigation_about

fragment_about.xml 中,我添加了一个按钮 buttonGoToFAQ 以使用 AboutFragment.kt

中的此代码导航到 fragment_faq like this
buttonGoToFAQ.setOnClickListener {
        val action = AboutFragmentDirections.actionFAQ()
        Navigation.findNavController(it).navigate(action)
    }

在我单击 BottomNavigationView 菜单 navigation_infonavigation_detect 并通过单击 navigation_about 菜单返回后,BottomNavigationView 上的选定菜单没有更改。
See this picture.

我想要的是菜单navigation_about应该被选中而不是其他菜单

我已经尝试覆盖 FAQFragment.kt 中的 fun onStart()fun onResume() 但无济于事。
nav_view 是我的 BottomNavigationView。

override fun onStart() {
    super.onStart()

    (requireActivity().findViewById<View>(R.id.nav_view) as BottomNavigationView).selectedItemId =
        R.id.navigation_about
}

我还认识到所有 BottomNavigationView 菜单的 ID 都与 src/main/res/navigation xml 文件

中的 ID 相同

几天后,我终于自己得到了答案。首先,我需要从 MainActivity 中获取 BottomNavigationView,之后,您只需更改另一个片段中的菜单项值即可。

MainActivity.kt中:

companion object {
    lateinit var binding: ActivityMainBinding
{

在片段上,
定义 BottomNavigationView 并在 onResume() 中设置所需的索引:

class FAQFragment : Fragment() {
    private val navView: BottomNavigationView = MainActivity.binding.navView

    ...

    override fun onResume() {
        super.onResume()

        navView.menu.getItem(2).isChecked = true
    }
}