Android 之 Navigation在目的地之间传递数据、ViewModel

本文详细介绍了在Android中如何使用Navigation组件在目的地间安全传递数据,包括定义目的地参数、使用Safe Args以及添加动画过渡效果。同时,文章探讨了ViewModel的实现、生命周期及其在Fragment间共享数据的应用,提供了一种简化界面控制器数据管理的方法。
摘要由CSDN通过智能技术生成

Android 之 Navigation在目的地之间传递数据、ViewModel

参考网页

一、在目的地之间传递数据

Navigation 支持您通过定义目的地参数将数据附加到导航操作。例如,用户个人资料目的地可能会根据用户 ID 参数来确定要显示哪个用户。

通常情况下,强烈建议您仅在目的地之间传递最少量的数据。例如,您应该传递键来检索对象而不是传递对象本身,因为在 Android 上用于保存所有状态的总空间是有限的。如果您需要传递大量数据,不妨考虑使用 ViewModel(如在 Fragment 之间共享数据中所述)。

1. 定义目的地参数
  1. 在 Navigation Editor 中,点击接收参数的目的地。
  2. 在 Attributes 面板中,点击 Add (+)。
  3. 在显示的 Add Argument Link 窗口中,输入参数名称、参数类型、参数是否可为 null,以及默认值(如果需要)。
  4. 点击 Add。请注意,该参数现在会显示在 Attributes 面板的 Arguments 列表中。
  5. 接下来,点击会将您转到此目的地的相应操作。在 Attributes 面板中,您现在应该会在 Argument Default Values 部分中看到新添加的参数。
  6. 您还可以看到该参数已添加到 XML 中。点击 Text 标签页以切换到 XML 视图,就会发现您的参数已添加到接收该参数的目的地。相关示例如下所示:
 <fragment android:id="@+id/myFragment" >
     <argument
         android:name="myArg"
         app:argType="integer"
         android:defaultValue="0" />
 </fragment>

支持参数
在这里插入图片描述

如果参数类型支持 null 值,您可以使用 android:defaultValue="@null" 声明默认值 null。

如果您选择其中一种自定义类型,则系统会显示 Select Class 对话框,提示您选择与该类型对应的类。您可以通过 Project 标签页从当前项目中选择类。

您可以选择 ,让 Navigation 库根据提供的值来确定类型。

您可以选中 Array,以指明参数应该是所选 Type 值的数组。请注意以下几点:

  • 不支持枚举数组和资源引用数组
  • 无论基础类型是否支持可为 null 的值,数组都支持可为 null 的值。例如,使用 app:argType=“integer[]” 时,您可以使用 app:nullable=“true” 来指示可传递 null 数组。
  • 数组仅支持一个默认值,即“@null”。数组不支持其他任何默认值。
2.使用 Safe Args 传递安全的数据

网址

3.在目的地之间添加动画过渡效果

借助 Navigation 组件,您可以同时向操作添加属性动画和视图动画。如需创建您自己的动画,请参阅动画资源。

Navigation 组件还包含几个默认动画,以帮助您快速入门。如需向操作添加动画,请执行以下操作

  • 在 Navigation Editor 中,点击应发生动画的操作。
  • 在 Attributes 面板的 Animations 部分中,点击要添加的动画旁边的下拉箭头。您可以从以下类型中进行选择:
    进入目的地
    退出目的地
    通过弹出操作进入目的地,弹出操作是指在导航时从返回堆栈上弹出其他目的地的操作。
    通过弹出操作退出目的地
  • 从显示的项目动画列表中选择动画。

添加动画后,点击 Text 标签页,以切换到 XML 文本视图。动画的 XML 现在显示在相应的 元素中。在以下示例中,specifyAmountFragment 是 confirmationAction 操作的源目的地:

<fragment
    android:id="@+id/specifyAmountFragment"
    android:name="com.example.buybuddy.buybuddy.SpecifyAmountFragmen
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值