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

如何使用BottomNavigationView和Jetpack导航与片段和不破坏片段视图

闻人梓
2023-03-14

在我的应用程序的主要活动中,我有BottomNavigationView和四个项目/选项卡。每个选项卡都有自己的片段。我使用Jetpack导航组件在这些片段之间导航。

当我使用NavController.navigate(...)导航到另一个片段时,以前的片段视图正在被销毁。我的一个片段包含地图视图,这使得片段视图的创建操作繁重。当用户更改BottomNavigationView选项卡时,在使用地图视图导航到片段时,旧的Android手机上有明显的延迟。我可以修改NavController不销毁视图,而是隐藏并显示视图吗?

TLDR:如何更改Jetpack导航以不破坏fragment的视图。相反,只是隐藏

在这个主题中已经有了一些讨论,但由于Jetpack导航库已经发展了很多,大多数解决方案已经过时。Jetpack Navigation 2.4.0支持多次回退等,但据我所知,没有官方解决方案来保持片段视图的活力?

共有1个答案

谯德佑
2023-03-14

我有同样的问题,仍然无法在导航文档或示例中找到解决方案。

现在我使用旧的方法,使用support portFragmentManager添加和添加ToBackStack,这样我就可以保持以前的片段不被破坏。只是一种解决方法,希望有人能提供更好的解决方案。

我的示例代码如下:

val fragment = CreateGroupWebFragment()
            activity?.supportFragmentManager?.beginTransaction()
                ?.add(R.id.main_tab_nav_host_fragment, fragment, fragment.TAG)
                ?.addToBackStack(fragment.TAG)
                ?.commit() 
 类似资料:
  • 如何从Jetpack撰写屏幕转到fragment,从fragment转到Jetpack编写屏幕?我用喷气背包组成导航?有什么帮助吗?

  • 我正在尝试实现一个简单的设计。一个带有宿主片段的活动。 问题是,其中一个目的地有一个底部导航栏。 经过一点研究,我发现最好的做法是有一个带有宿主片段的单一活动。 在我的特殊情况下,底部导航栏不应该在登录和注册片段中可见,只是隐藏它对我来说似乎不合适。 我设法创建了一个带有底部导航条的活动,将主片段连接到frag 1、frag 2或frag 3,但现在我需要添加登录片段和注册片段,我不确定如何处理导

  • 在我的应用程序中,我正在使用Jetpack导航组件,我遇到了一个问题,即当导航回片段时,无法保存片段状态。 当我从导航到时,它是通过溢出菜单: 当导航回MainFragment时,某些视图上的可见性和某些文本视图中的文本不会保存,并且我的状态机变量也已失去其状态。 我读过一些解决方案,其中根视图保存在片段中的全局变量中,虽然这解决了视图上的可见性问题,但文本视图仍然为空,状态机变量被重置。 在这种

  • 我有一个ViewPagerContainer片段,在应用程序启动时加载。ViewPagerContainer片段将两个选项卡(选项卡A和选项卡B)添加到操作栏。选项卡B有两个项目的列表视图。 我所做的:我在选项卡B片段中的列表视图项上附加了一个click listener,这样当用户单击一个项时,它会在第一个片段(即选项卡B下)内打开另一个片段(子片段)。 我陷入困境的地方:当用户按下后退按钮时,

  • 我有一个带有导航抽屉的应用程序,一个活动和许多片段。当我改变设备方向时,我的主要活动是重新创建,出现的是我的主要片段,而不是当前片段。就像我启动应用程序时一样。 如何恢复当前片段以及与所选片段相关的数据? 我看过这篇文章,但它不起作用:用抽屉菜单保存片段状态 提前感谢那些能帮助我的人。

  • 是否可以使用底部导航视图和导航组件传递和访问片段中的参数? 我使用一个活动包含多个片段的方法,其中我的顶层片段需要一个参数(通常通过newInstance生成的方法完成)。我看过导航组件开发者指南和codelab,但是它只提到了使用safeargs和在目的地和动作中添加参数标签。 这是我的导航图: 底部导航视图菜单: 主要活动: activity_main.xml 家庭碎片