jetpack之Navigation

概述

当前Android开发中使用Fragment来开发页面已经成为主流做法。Fragment轻量、可控性强等优点让人感觉很香。但是Fragment也有自己的硬伤,那就是回退栈与页面参数传递。

核心功能

  • 处理 Fragment 事务
  • 默认情况下,正确处理往返操作。
  • 为动画和转换提供标准化资源。
  • 实现和处理深层链接
  • 包括导航界面模式(例如抽屉式导航栏和底部导航),用户只需完成极少的额外工作
  • Safe Ags-可在目标之间导航和传递数据时提供类型安全的Gradle插件
  • VewModel支持·您可以将VewModel的范围限定为导航图,以在图表的目标之间共享与界面相关的数据。

核心三件套

导航图

在一个集中位置包含所有导航相关信息的XML资源。这包括应用内所有单个内容区域(称为目标)以及用户可以通过应用获取的可能路径。

NavHost

显示导航图中目标的空白容器。导航组件包含一个默认NavHost实现(NavHostFragment),可显示Fragment 目标

NavController

在NavHost 中管理应用导航的对象。当用户在整个应用中移动时,NavController会安排NavHost 中目标内容的交换

在应用中导航时,您告诉NavController,您想沿导航图中的特定路径导航至特定目标,或直接导航至特定目标。NavController便会在NavHost中显示相应目标。

Navigation的基础使用

环境配置

依赖

def nav_version = "2.4.0"
// Java language implementation
implementation "androidx.navigation:navgation-fragment$nav_version"
implementation "androidx.navigation:navigation-ui:$nav_version"

创建Fragment

这里说明一下,要知道,核心三大件中的导航图其实本质上指的是Fragment,我们可以把Fragment认为是一个目标。

构建navigation核心(导航图)配置

  1. navigation(主标签)
    startDestination启动默认的目标Fragment

  2. fragment(代表一个destination资源,其实就是一个目的地)

    • id:资源编号
    • name:资源类型
    • layout:fragment对应需要加载的布局资源。
    • label:标签文本
  3. action(一个固定的跳转路径)

    • id:资源编号
    • destination:目的地
    • enterAnim:跳转动画
    • exitAnim:退出动画

在Activity中声明NavHost容器

我们实际上是由一个NavHostFragment作为核心展示容器,然后将导航图数据绑定到上面这里申明一个主要展示容器NavHostFragment,他本质上也是一个Frament然后需要通过app:navGraph="@navigation/nav_graph"绑定一个导航图app:defaultNavHost="true"表示回退栈由fragment管理

	<fragment
	android:id="@+id/fmt_main"
	android:layout_width="match_parent"
	android:layout_height="match_parent"
	android:name="androidx.navgation.fragment.NavHostFragment"
	app:navGraph="@navigation/nav_graph"
	app:defaultNavHost="true"/>

将NavHost容器交给NavController进行控制

	NavController navController = Navigation.findNavController(this, R.id.fmt_main);

参数传递

fragment之间的数据传递

  1. 数据传递通过Bundle完成
  2. fragment之间的跳转由Navigation控制,通过调用配置好的Action路径进行跳转
  3. 数据接受通过getArguments()
    String name = getArguments().getString(“name”);

fragment与activity之间的数据传递

你可能感兴趣的:(Android进阶,android,jetpack)