当前位置: 首页 > 知识库问答 >
问题:

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

皇甫逸清
2023-03-14

我有一个非常简单的应用程序,由三个片段和一个底部导航栏组成,使用“New Project”创建-

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

我尝试过:

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

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

共有2个答案

施永宁
2023-03-14

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

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

有关更多信息,请单击此处

顾淳
2023-03-14

单击按钮应具有与用户点击底部导航中相应项目相同的效果。因此,需要在底部导航视图上调用setSelectedItemId()。这只能在显示底部导航视图的活动中完成。

一个选项是引入共享的视图模型

  • aLiveData要由活动
  • 观察
  • 要由ButtonOnClickListener调用的函数onButtonClick(),它将更新LiveData

一旦激活了LiveData观察器,您的活动就可以调用

 binding.navView.selectedItemId = R.id.navigation_dashboard

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

 类似资料:
  • 我注意到一个有趣的行为:当导航模式设置为时,如果我将手机置于横向模式,它会将选项卡转换为列表,并保留片断和列表项(以前是选项卡项)之间的关联,如何根据需要而不是根据方向变化实现此结果?

  • 我有如下的屏幕,其中包含一个导航抽屉和底部导航在同一个屏幕上: 我正在使用Jetpack导航架构组件。 当前问题和我尝试了什么? 单击第二个和第三个底部导航项目会在工具栏上显示返回箭头吗? 已尝试:将与第二和第三底部导航相关联的片段设置为顶级目的地 代替 不起作用。 任何帮助高度赞赏! 我的代码如下所示。 activity_main.xml menu_bottom.xml nav_graph.xm

  • 我创建了一个带有底部导航栏的活动。我在谷歌上搜索了很多关于它的信息,但现在我不知道如何准确地处理这个问题。之前,当用户点击底部导航时,我刚刚开始了另一个活动,但我认为这不好。 如何在选项卡之间切换?我必须处理碎片吗?那么“setContentView(int layoutResID)”呢?我该怎么做?我很困惑。。。 非常感谢你的帮助——我希望你明白我的意思。

  • 我有一个关于底部导航栏的奇怪问题,虽然我花了大量时间在它上面,但我无法解决。当我以“推荐”的方式(从许多教程中)使用它时,它就是无法导航。 那么,我所说的“推荐”方式是什么意思呢:我有一个单独的acticity,其中有一个名为“MainActivity”的navHostFragment。这个主要活动有一个XML布局文件,我将底部导航栏放在其中。BottomNavigationBar还有一个XML布

  • 我在我的应用程序中使用抽屉菜单,并实现了在NavigationDrawer片段类中切换片段的逻辑。我最近读到片段切换只能从托管活动中发生。 有一个从NavigationDrawerFragment调用的接口,用于通知导航抽屉列表视图中所选位置的MainActivity。 我感到困惑的是,在Mainactive中有一个静态片段,它是使用NavigationDrawer片段中接口提供的位置调用的。 P

  • 我使用底部选项卡导航器在React原生导航。当我切换标签时,组件不更新。请让我知道如何更新/刷新整个组件,当我点击底部的选项卡选项卡导航