0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

导航对多返回栈的支持

谷歌开发者 来源:Android 开发者 作者:Android 2021-09-29 11:21 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

欢迎来到第二个关于导航的 MAD Skill 系列的另一篇文章!本文我们将介绍一个呼声很高的功能,即导航 (Navigation) 对多返回栈的支持。如果您更倾向于视频的形式,请查看以下视频内容:

概述

假设您的应用使用了 BottomNavigationView。通过这个功能,当用户选择另一个标签页 (Tab) 时,当前标签页的返回栈会被保存,而所选标签页的返回栈会被恢复。

从 2.4.0-alpha01 版本开始,NavigationUI 辅助类不需要改变任何代码即可支持多返回栈。也就是说,如果您的应用使用了为 BottomNavigationView 或 NavigationView 提供的 setupWithNavController() 方法,则只需要更新依赖库版本,便可默认启用多返回栈。

支持多返回栈

让我们通过这个仓库中的高级导航示例来看看实际效果。

该应用由 3 个标签页组成,每个标签页都有它自己的导航流。为了在导航的早期版本中支持多返回栈,我们需要在该示例的 NavigationExtensions 文件中添加一系列辅助函数。通过这些扩展函数,应用可以为每个标签页保持一个单独的 NavHostFragment,每个 NavHostFragment 带有它自己的返回栈,当用户切换标签页时,应用在不同的 NavHostFragment 之间进行切换。

仓库

https://github.com/android/architecture-components-samples/tree/master/NavigationAdvancedSample

NavigationExtensions

https://github.com/android/architecture-components-samples/blob/8f4936b34ec84f7f058fba9732b8692e97c65d8f/NavigationAdvancedSample/app/src/main/java/com/example/android/navigationadvancedsample/NavigationExtensions.kt

让我们看看如果移除这些扩展函数会发生什么。为此我删除了 NavigationExtensions 类,在所有使用它的地方都替换为 NavigationUI 中标准的 setupWithNavController() 方法以将我们的 BottomNavigationView 连接到 NavController 上。

class MainActivity : AppCompatActivity()

{ private lateinit var navController: NavController private lateinit var appBarConfiguration: AppBarConfiguration override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState)

setContentView(R.layout.activity_main) val navHostFragment = supportFragmentManager.findFragmentById( R.id.nav_host_container ) as NavHostFragment navController = navHostFragment.navController

// 使用 navController 设置 bottomNavigationView val bottomNavigationView = findViewById《BottomNavigationView》(R.id.bottom_nav) bottomNavigationView.setupWithNavController(navController)

// 使用 navController 设置 ActionBar 以及 3 个一级目的地页面 appBarConfiguration = AppBarConfiguration( setOf(R.id.titleScreen, R.id.leaderboard, R.id.register) ) val toolbar = findViewById《Toolbar》(R.id.toolbar) setSupportActionBar(toolbar) toolbar.setupWithNavController(navController, appBarConfiguration) } override fun onSupportNavigateUp(): Boolean { return navController.navigateUp(appBarConfiguration)

}}

同时,我使用 include 标签将 3 个单独的导航图合并为一个图。现在我们的 Activity 布局只包含一个带有单个导航图的 NavHostFragment。

《navigation xmlns:android=“http://schemas.android.com/apk/res/android” xmlns:app=“http://schemas.android.com/apk/res-auto” android:id=“@+id/nav_graph” app:startDestination=“@+id/home”》

《include app:graph=“@navigation/home”/》 《include app:graph=“@navigation/list”/》 《include app:graph=“@navigation/form”/》

《/navigation》

当我运行应用时,这次底部标签页不再保持它们的状态,并会在我切换到其他标签页时重置它的返回栈。由于移除了 NavigationExtensions,该应用不再支持多返回栈。 现在我将更新 navigation 和 fragment 依赖库的版本。

// fragment 最新版本 https://developer.android.google.cn/jetpack/androidx/releases/fragment?hl=en// navigation 最新版本 https://developer.android.google.cn/jetpack/androidx/releases/navigation?hl=en

versions.fragment = “1.4.0-alphaXXX”versions.navigation = “2.4.0-alphaXXX”

Gradle sync 完成后,我再次运行应用,这时当我导航至其他标签页,可以看到每个标签页都保持了它的状态。注意这个行为是默认启用的。 最后,让我们运行测试来验证是否一切正常。该应用已经拥有一些验证多返回栈行为的测试。我运行 BottomNavigationTest 并观察每个底部导航行为测试的运行。 瞧,我们所有测试都通过了!

小结

就是这样!如果您的应用使用 BottomNavigationView 或 NavigationView,并且您一直在等待支持多返回栈,您所需要做的仅仅是更新 navigation 和 fragment 依赖库,不需要改变任何代码! 如果您需要进一步的自定义,也有新的 API 支持保存和恢复返回栈。请参阅我们之前的推文《Android 多返回栈技术详解》。 如果您想了解更多有关底层 API 以及需要修改哪些内容以支持多返回栈的信息,请参阅我们之前的推文《全新的 Fragment: 使用新的状态管理器》。 感谢您关注本导航系列!

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 导航
    +关注

    关注

    7

    文章

    582

    浏览量

    44071
  • 代码
    +关注

    关注

    30

    文章

    4976

    浏览量

    74376

原文标题:导航: 多返回栈 | MAD Skills

文章出处:【微信号:Google_Developers,微信公众号:谷歌开发者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    百度地图与雅迪联合首发支持华为鸿蒙系统投屏导航应用

    两轮车出行行业迎来里程碑式突破——百度地图与雅迪联合首发支持华为鸿蒙系统投屏导航应用。
    的头像 发表于 04-23 16:10 97次阅读

    星座GNSS卫星导航信号模拟器的应用,卫星导航星座模拟器,卫星导航模拟器

    景的广泛性与适配性直接决定了相关产业的发展效率。同步天下SYN5204型星座GNSS卫星导航信号模拟器,集成卫星模拟信号源与RF信号采集回放功能,支持北斗B1、GPS L1、Galileo E1、QZSS L1
    的头像 发表于 04-08 17:15 371次阅读

    国内七大无人机模融合导航定位系统软件介绍

    无人机模融合导航定位系统
    的头像 发表于 01-12 15:33 415次阅读

    无人机模融合导航定位系统:信息化驱动支撑平台

    无人机模融合导航定位系统:信息化驱动支撑平台
    的头像 发表于 01-12 11:45 423次阅读
    无人机<b class='flag-5'>多</b>模融合<b class='flag-5'>导航</b>定位系统:信息化驱动支撑平台

    AT6558R模卫星导航接收机芯片技术与应用解析

          在卫星导航技术高速发展的当下,模兼容、高集成度、低功耗已成为接收机芯片的核心发展方向。AT6558R作为一款高性能模卫星导航接收机芯片,凭借先进的SOC单芯片设计架构,
    的头像 发表于 12-25 16:53 1031次阅读
    AT6558R<b class='flag-5'>多</b>模卫星<b class='flag-5'>导航</b>接收机芯片技术与应用解析

    模态大模型驱动的复杂环境精准导航避障系统平台的应用

    模态大模型驱动的复杂环境精准导航避障系统平台的应用
    的头像 发表于 12-22 13:15 398次阅读
    <b class='flag-5'>多</b>模态大模型驱动的复杂环境精准<b class='flag-5'>导航</b>避障系统平台的应用

    Stack到底用来干嘛的呢?

    我们在函数的局部变量、数组这些不能超过1K(含嵌套的函数),否则程序就会崩溃进入hardfaul。 除了这些局部变量以外,还有一些实时操作系统的现场保护、返回地址都是存储在里面。 还有一点题外话,就是的增长方向是从高地址到低
    发表于 12-01 08:04

    电能质量在线监测装置支持平台数据推送吗?

    和技术细节: 一、核心技术支撑 协议并行支持 主流装置通常内置多种通信协议,可同时激活多个协议向不同平台推送数据。例如: 工业协议 :Modbus TCP(用于 SCADA 系统)、IEC 61850 MMS(用于智能变电站
    的头像 发表于 11-07 09:59 736次阅读

    AT6558--北斗定位芯片 一款高性能 BDS/GNSS 模卫星导航接收机 SOC 单芯片

    ,可以同时接收六个卫星导航系统的 GNSS 信号,并且实现联合定位、导航与授时。二、AT6558的功能概述: 支持 BDS/GPS/GLONASS 卫星导航系统的单系统定位,以及任
    发表于 09-29 09:54

    SkyLiTE™ 高频段频段功率放大器模块,支持 LTE 高级应用 skyworksinc

    电子发烧友网为你提供()SkyLiTE™ 高频段频段功率放大器模块,支持 LTE 高级应用相关产品参数、数据手册,更有SkyLiTE™ 高频段
    发表于 09-24 18:35
    SkyLiTE™ 高频段<b class='flag-5'>多</b>模<b class='flag-5'>多</b>频段功率放大器模块,<b class='flag-5'>支持</b> LTE 高级应用 skyworksinc

    AT6558R:高性能模卫星导航芯片的全面解析

    前端、数字基带处理器、32位RISC CPU和电源管理模块,还支持中国北斗(BDS)、美国GPS、俄罗斯GLONASS等系统联合定位,为各类设备提供精准可靠的定位服务。‌ 其创新架构确保了在复杂环境下的稳定性,是现代导航和物联
    的头像 发表于 07-24 15:30 1378次阅读
    AT6558R:高性能<b class='flag-5'>多</b>模卫星<b class='flag-5'>导航</b>芯片的全面解析

    MEMS组合导航系统能否成为领域导航的“全能王者”?

    在现代化作业场景中,高精度、高可靠性的导航系统已成为各领域不可或缺的核心设备。ER-GNSS/MINS-01 MEMS组合导航系统作为一款将卫星定位与惯性测量技术融合的创新产品,犹如一颗璀璨的新星
    的头像 发表于 07-21 15:57 1231次阅读
    MEMS组合<b class='flag-5'>导航</b>系统能否成为<b class='flag-5'>多</b>领域<b class='flag-5'>导航</b>的“全能王者”?

    组合导航系统如何实现源融合破解单一导航局限

    无论是自动驾驶汽车、无人机巡检,还是精准农业、飞行记录仪,高精度、高可靠的导航都是核心需求。然而,传统导航技术各有短板:卫星导航(GNSS):信号易受遮挡(如城市峡谷、隧道),且易受干扰或欺骗。惯性
    的头像 发表于 07-10 16:58 1102次阅读
    组合<b class='flag-5'>导航</b>系统如何实现<b class='flag-5'>多</b>源融合破解单一<b class='flag-5'>导航</b>局限

    【汇思博SEEK100开发板试用体验】06 天气app--使用组件导航实现设置页及页面跳转

    支持在不同组件间传递跳转参数,提供灵活的跳转操作,从而更便捷地实现对不同页面的访问和复用。本文将从组件导航(Navigation)的显示模式、路由操作、子页面管理、跨包跳转以及跳转动效等几个方面进行
    发表于 07-09 16:57

    AT2659模卫星导航射频放大器技术解析与应用

    电路,完全符合RoHS环保标准,适用于各类对尺寸和功耗敏感的导航设备。 技术特性详解 系统兼容性 该芯片支持1550MHz~1615MHz工作频段,完整覆盖: 中国北斗系统(BDS) L1频段
    的头像 发表于 06-26 16:19 959次阅读
    AT2659<b class='flag-5'>多</b>模卫星<b class='flag-5'>导航</b>射频放大器技术解析与应用