我有一个非常简单的应用程序,由三个片段和一个底部导航栏组成,是通过使用 Android Studio 中的“新项目 -> 底部导航活动”创建的。第一个片段包含一个按钮,它应该将我带到第二个片段,就像单击底部导航栏的中间按钮一样。
有一个“标准”的方法来做到这一点吗?
我已经尝试过:
launch(...)
,这似乎会启动具有自己的后堆栈的片段并破坏底部导航。setSelectedItemId(...)
,这要么会导致异常,要么会以不同的方式破坏底部导航。单击
Button
应该具有与用户点击底部导航中相应项目相同的效果。所以你需要在 BottomNavigationView
上调用 setSelectedItemId()。这只能在显示
Activity
的 BottomNavigationView
中完成。
一个选择是引入一个 共享
ViewModel
与
LiveData
由 Activity
onButtonClicked()
由 OnClickListener
的 Button
调用,它将更新 LiveData
一旦
LiveData
观察者开火,你的 Activity
就可以呼叫
binding.navView.selectedItemId = R.id.navigation_dashboard
请注意,为了传递有关此类事件的信息,应选择某种在使用后会失效的数据类型。例如,请参阅 LiveData 与 SnackBar、导航和其他事件(SingleLiveEvent 案例)
我在我的片段中使用这个:
(activity as MainActivity).binding.navView.selectedItemId = R.id.tabId
将此代码从您想要转到第二个片段的位置粘贴
Fragment fragment = new DashboardFragment();
FragmentManager fm = getActivity().getSupportFragmentManager();
fm.beginTransaction().replace(R.id.frame_layout, fragment).commit();
了解更多信息点击这里