专栏名称: Android_开发者
目录
相关文章推荐
51好读  ›  专栏  ›  Android_开发者

在应用中导航时使用 SafeArgs | MAD Skills

Android_开发者  · 掘金  · android  · 2021-02-10 14:39

正文

阅读 50

在应用中导航时使用 SafeArgs | MAD Skills

这是一个新的系列文章,我们称之为 "Modern Android Development 技巧",简称为 "MAD Skills"。本系列文章致力于帮助开发者们打造更好的现代 Android 开发体验,敬请关注。

今天为大家发布本系列文章中的第三篇: 在应用中导航时使用 SafeArgs。如果您想回顾过去发布的内容,请参考下面链接查看:

这篇文章主要介绍 SafeArgs,它属于导航组件,并且可以在应用不同的目的地 (界面) 之间提供更加便捷的数据传递功能。

简介

当您在应用中导航到不同目的地的时候,可能会需要传递数据。为了避免使用全局对象引用,通过数据传递可以实现更好的代码封装结构,这样不同的 fragment 或者 activity 仅需要分享它们所需的数据即可。

导航组件可以通过 Bundles 传递数据,这个机制也可用于 Android 中跨 activity 传递数据。

这里我们也可以使用同样的方式,为要传递的数据创建一个 Bundle,然后在接收侧将数据提取出来。

不过导航组件有更好的方法: SafeArgs

SafeArgs 是一个 gradle 插件,它可以帮助您在 导航图 中输入需要传递的数据信息。然后它会生成代码帮您解决创建 Bundle 时所需完成的冗长的过程,并且在接收侧提取数据。

您也可以直接使用 Bundle,但是我们建议使用 SafeArgs。不仅仅是为了代码更简洁,更多的是它为数据增加了类型安全的保障,使得代码具备更好的健壮性。

为了向大家展示 SafeArgs 的效果,我将继续使用之前在 Dialog Destinations 演示过的 Donut Tracker (甜甜圈追踪) 应用。如果您希望随着文章的讲解进行同步操作,请下载 应用源码 ,并在 Android Studio 中打开。

制作甜甜圈的时候到了

我们的 donut tracking 应用又来了:

Donut Track: 就是这个 App,它又来了

Donut Track: 就是这个 App,它又来了

Donut Tracker 会显示甜甜圈的列表,每个列表项含有名称、描述和评分信息,这些内容有些是我添加的,有些是通过在点击 悬浮操作按钮 (FAB) 弹出的对话框中填写的。

点击悬浮操作按钮会弹出对话框填写新的甜甜圈信息

点击悬浮操作按钮会弹出对话框填写新的甜甜圈信息

仅仅可以添加新的甜甜圈的信息是不够的,我还希望可以修改已有甜甜圈的信息。没准我拿到一张甜甜圈的照片,或者我希望提升之前的评分。

比较自然的实现方法是点击列表项,然后打开之前添加甜甜圈时的对话框,然后我可以在这里修改甜甜圈的信息。但是应用如何知道对话框里显示哪个甜甜圈的信息呢?代码里需要传递所点击的列表项的信息。在这里,它需要将对应表项的 id 从列表所在的 fragment 传递到对话框所在的 fragment,然后对话框可以根据 id 从数据库里找到对应甜甜圈的信息,并且填充到表单里。

要传递 id,这里我们使用 SafeArgs 来实现。

使用 SafeArgs

这里我需要说明一下,我已经完成了全部的代码,大家可以在 GitHub 的 示例 中找到完整的代码。所以接下来我会给大家讲解每个步骤,并且让大家看到示例代码的效果,而不是简简单单带着大家完成代码。

首先,我需要添加一些依赖库。

SafeArgs 和导航组件的其它模块不太一样,它本身并不是一个 API,而是一个可以生成代码的 gradle 插件。所以需要将它设置为 gradle 依赖,并且在构建时使其能够正确运行来生成所需的代码。

首先我在项目级的 build.gradle 文件的依赖部分中添加了下面的内容:

def nav_version = "2.3.0"
// 获取最新的版本号 https://developer.android.google.cn/jetpack/androidx/releases/navigation
classpath “androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version”
复制代码






请到「今天看啥」查看全文