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

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

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

Fragment with Button

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

我已经尝试过:

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

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

android bottomnavigationview android-architecture-navigation android-bottomnav
3个回答
14
投票

单击

Button
应该具有与用户点击底部导航中相应项目相同的效果。所以你需要在 BottomNavigationView 上调用
setSelectedItemId()
。这只能在显示
Activity
BottomNavigationView
中完成。

一个选择是引入一个 共享

ViewModel

  • a
    LiveData
    Activity
  • 观察
  • 一个函数
    onButtonClicked()
    OnClickListener
    Button
    调用,它将更新
    LiveData

一旦

LiveData
观察者开火,你的
Activity
就可以呼叫

 binding.navView.selectedItemId = R.id.navigation_dashboard

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


0
投票

我在我的片段中使用这个:

(activity as MainActivity).binding.navView.selectedItemId = R.id.tabId

-2
投票

将此代码从您想要转到第二个片段的位置粘贴

Fragment fragment = new DashboardFragment();
            FragmentManager fm = getActivity().getSupportFragmentManager();
            fm.beginTransaction().replace(R.id.frame_layout, fragment).commit();

了解更多信息点击这里

© www.soinside.com 2019 - 2024. All rights reserved.