[Android官方] Jetpack导航组件:实战与分析

本文介绍了Android Jetpack的导航组件,包括其组成:导航图、导航容器和导航控制器。通过实例展示了如何使用Navigation组件进行Fragment的导航,封装事务、过场动画、参数传递,并提供了深入理解NavHostFragment、nav_graph.xml和NavController的分析。
摘要由CSDN通过智能技术生成

前言

导航(Navigation )指的是用户在应用中的前进和后退操作。导航很大程度上和业务逻辑相关。但是,在传统的Android应用开发中,导航需要开发者自己处理,对应的backstack也需要开发者自行维护,与业务相关的导航逻辑也要硬编码在Java代码中。而同时期的iOS应用开发框架早就提出了导航图的概念,并对导航进行了框架级别的抽象和支持。

为了解决类似问题,简化Android应用开发,Google在2018年推出了JetpackJetpack是一套库、工具和指南,可帮助开发者更轻松地编写优质应用。在Jetpack中,Android第一次以Navigation组件的形式对用户的导航行为进行了抽象和封装,不仅简化了开发流程,还通过遵循一套既定原则来确保一致且可预测的用户体验,从而实现了代码可维护性用户体验一致性的完美结合。

概览

Jetpack导航组件由以下三个关键部分组成:

  • 导航图(Navigation graph):在一个XML文件中集中定义所有导航相关信息的,它包括应用内的所有导航目标以及所有可能的导航路径
  • 导航容器(NavHost):显示导航目标的容器。Jetpack提供了一个默认的导航容器实现NavHostFragment
  • 导航控制器(NavController):在导航容器中管理导航对象。当用户在应用中前进或者后退时,导航控制器决定下一个将要显示的内容。

功能

JetpackNavigation组件提供以下几个功能:

  • 封装Fragment事务:Navigation组件封装了Fragment事务,从而简化了开发者的工作。
  • 为过场动画提供标准化支持:开发者只需要专注于定义过场动画本身。
  • 传递参数:通过Safe Args插件,开发者可在导航目标之间传递类型安全的数据。

实战

我们的实战是基于Google的Jetpack Navigation Codelab。它的最终效果是这样:
在这里插入图片描述
这是3个简单的Fragment之间跳转的情景,经过过场动画的修饰,它们之前的切换非常流畅自然。接下来,我们就通过代码来详细讲解Fragment导航是如何实现的。

首先,在build.gradle中添加以下依赖:

dependencies {
   
    ...
    //Navigation
    implementation "androidx.navigation:navigation-fragment-ktx:$rootProject.navigationVersion"
    implementation "androidx.navigation:navigation-ui-ktx:$rootProject.navigationVersion"
}

新建两个Fragment。其中,第二个Fragment会根据传入的参数决定要加载的UI:

class HomeFragment : Fragment() {
   
  override fun onCreateView(
      inflater: LayoutInflater,
      container: ViewGroup?,
      savedInstanceState: Bundle?
  ): View? {
   
    return inflater.inflate(R.layout.home_fragment, container, false)
  }
}

class FlowStepFragment : Fragment() {
   
  override fun onCreateView(
      inflater: LayoutInflater,
      container: ViewGroup?,
      savedInstanceState: Bundle?
  ): View? {
   
    return when (flowStepNumber) {
   
        2 -> inflater.inflate(R.layout.flow_step_two_fragment, container, false)
        else -> inflater.inflate(R.layout.flow_step_one_fragment, container, false)
    }
  }
}

新建导航视图文件(mobile_navigation.xml)
在这里插入图片描述
打开导航视图文件,进行可视化编辑,包括新增Fragment,或者连接Fragment:在这里插入图片描述
我们打开导航视图文件的Text标签,进入XML的编辑页面,并进行如下配置:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值