导航到其他片段、切换到其他菜单并切换回初始菜单后未选择 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.kt
、DetectFragment.kt
、AboutFragment.kt
、
将 src/main/res/layout
中的布局重命名为 fragment_info.xml
、fragment_detect.xml
、fragment_about.xml
、
将 src/main/res/menu
中的菜单重命名为 navigation_info
、navigation_detect
、navigation_about
在 fragment_about.xml
中,我添加了一个按钮 buttonGoToFAQ
以使用 AboutFragment.kt
中的此代码导航到 fragment_faq
like this
buttonGoToFAQ.setOnClickListener {
val action = AboutFragmentDirections.actionFAQ()
Navigation.findNavController(it).navigate(action)
}
在我单击 BottomNavigationView 菜单 navigation_info
或 navigation_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
}
}
我正在使用底部导航构建一个具有 3 个菜单的 android 应用程序。我在 Android Studio 中使用底部导航 Activity.
创建了新项目我将片段重命名为:InfoFragment.kt
、DetectFragment.kt
、AboutFragment.kt
、
将 src/main/res/layout
中的布局重命名为 fragment_info.xml
、fragment_detect.xml
、fragment_about.xml
、
将 src/main/res/menu
中的菜单重命名为 navigation_info
、navigation_detect
、navigation_about
在 fragment_about.xml
中,我添加了一个按钮 buttonGoToFAQ
以使用 AboutFragment.kt
fragment_faq
like this
buttonGoToFAQ.setOnClickListener {
val action = AboutFragmentDirections.actionFAQ()
Navigation.findNavController(it).navigate(action)
}
在我单击 BottomNavigationView 菜单 navigation_info
或 navigation_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 文件
几天后,我终于自己得到了答案。首先,我需要从 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
}
}