使用底部导航和导航组件在按钮单击上切换选项卡

Kai*_*tje 6 android bottomnavigationview android-bottomnav android-architecture-navigation

我有一个非常简单的应用程序,由三个片段和一个底部导航栏组成,是通过使用 Android Studio 中的“新项目 -> 底部导航活动”创建的。第一个片段包含一个按钮,它应该将我带到第二个片段,就像单击底部导航栏的中间按钮一样。

带按钮的片段

有没有一个“标准”的方法来做到这一点?

我努力了:

  • 使用launch(...)导航组件,该组件似乎使用自己的后堆栈启动片段并破坏底部导航。
  • 以不同的方式使用setSelectedItemId(...),这要么导致异常,要么以不同的方式破坏底部导航。

在这篇文章中,有人问了完全相同的问题,但它被标记为重复。我找不到答案,特别是关于导航组件。

0X0*_*gar 14

单击Button应该与用户点击底部导航中的相应项目具有相同的效果。因此,您需要在 上调用setSelectedItemId()BottomNavigationViewActivity这只能在显示时完成BottomNavigationView

一种选择是引入共享ViewModel

  • aLiveData需观察的Activity
  • 您的onButtonClicked()调用的函数将更新OnClickListenerButtonLiveData

一旦LiveData观察者开火,你就Activity可以打电话

 binding.navView.selectedItemId = R.id.navigation_dashboard
Run Code Online (Sandbox Code Playgroud)

请注意,为了传递有关此类事件的信息,应选择某种在使用后可以失效的数据类型。例如,请参阅带有 SnackBar、导航和其他事件的 LiveData(SingleLiveEvent 案例)