【问题标题】:Switch tab on button click with Bottom Navigation and Navigation component使用底部导航和导航组件在按钮单击上切换选项卡
【发布时间】:2022-03-02 06:17:09
【问题描述】:

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

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

我试过了:

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

在这个post 中,有人问了完全相同的问题,但它被标记为duplicate。我找不到答案,尤其是关于导航组件。

【问题讨论】:

  • 您在实施上述问题中的解决方案方面有什么收获?
  • 取决于方式和方式,异常或不工作的底部导航。

标签: android bottomnavigationview android-architecture-navigation android-bottomnav


【解决方案1】:

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

一种选择是引入shared ViewModel

  • LiveData 将被Activity 观察
  • 一个函数onButtonClicked() 将被你的Button 的OnClickListener 调用,这将更新LiveData

一旦LiveData 观察者触发,您的Activity 就可以调用

 binding.navView.selectedItemId = R.id.navigation_dashboard

请注意,要传递有关此类事件的信息,应选择某种在使用后可以失效的数据类型。参见例如LiveData with SnackBar, Navigation and other events (the SingleLiveEvent case)

【讨论】:

  • 这工作并且写得很好:) 顺便说一句:现在有关于passing events via LiveData 的官方文档。不过,我确实发现中等文章更易于阅读和理解。
【解决方案2】:

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

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

欲了解更多信息click here

【讨论】:

  • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。
  • 问题的标题和问题本身询问有关使用底部导航和Android Navigation component 以编程方式更改选项卡的问题。这个答案如何解决这个问题?
猜你喜欢
  • 1970-01-01
  • 2021-11-07
  • 1970-01-01
  • 1970-01-01
  • 2012-04-24
  • 1970-01-01
  • 2020-12-02
  • 2021-10-09
  • 1970-01-01
相关资源
最近更新 更多