文章目录
Android 之 Navigation在目的地之间传递数据、ViewModel
参考网页
一、在目的地之间传递数据
Navigation 支持您通过定义目的地参数将数据附加到导航操作。例如,用户个人资料目的地可能会根据用户 ID 参数来确定要显示哪个用户。
通常情况下,强烈建议您仅在目的地之间传递最少量的数据。例如,您应该传递键来检索对象而不是传递对象本身,因为在 Android 上用于保存所有状态的总空间是有限的。如果您需要传递大量数据,不妨考虑使用 ViewModel(如在 Fragment 之间共享数据中所述)。
1. 定义目的地参数
- 在 Navigation Editor 中,点击接收参数的目的地。
- 在 Attributes 面板中,点击 Add (+)。
- 在显示的 Add Argument Link 窗口中,输入参数名称、参数类型、参数是否可为 null,以及默认值(如果需要)。
- 点击 Add。请注意,该参数现在会显示在 Attributes 面板的 Arguments 列表中。
- 接下来,点击会将您转到此目的地的相应操作。在 Attributes 面板中,您现在应该会在 Argument Default Values 部分中看到新添加的参数。
- 您还可以看到该参数已添加到 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