1. 开始之前
简介
Dessert Clicker 使用内联状态和数据。在本练习中,您将移除 MainActivity 中的内联状态、数据和逻辑,并将其移至 ViewModel
。
将应用逻辑从视图中抽象出来并移至 ViewModel 是 Android 开发中的一种现代实践。这种实践带来了以下益处
- 代码对其他开发者来说更具可读性。
- 代码更具可测试性。
- 多名开发者可以同时在一个应用上工作,而互不干扰。
解决方案代码可在文末找到,但请先尝试完成练习,然后再查看答案。可以将解决方案视为实现应用的一种方式。
前提条件
- 已完成 Android Basics in Compose 课程,包括 Compose 中的 ViewModel 和状态 Codelab
准备工作
- 一台已安装 Android Studio 并可访问互联网的计算机
- Dessert Clicker 应用的解决方案代码
您将构建的应用
在本练习中,您将通过添加 ViewModel
来处理数据和应用逻辑,从而改进 Dessert Clicker 应用的架构。
本练习分为多个部分,您将依次完成以下步骤
- 更新并添加必要的依赖项。
- 创建
ViewModel
类。
2. 下载入门代码
- 在 Android Studio 中,打开
basic-android-kotlin-compose-training-dessert-clicker
文件夹。 - 在 Android Studio 中打开 Dessert Clicker 应用代码。
3. 设置依赖项
- 将以下变量添加到您的项目
build.gradle
文件中
buildscript {
ext {
...
lifecycle_version = '2.5.1'
}
}
- 将以下依赖项添加到
app/build.gradle
文件中
dependencies {
...implementation "androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycle_version"
}
4. 创建 UI 状态类
目前,MainActivity
中的 DessertClickerApp()
可组合函数包含驱动 UI 的数据和状态。
创建一个数据类,该类保存 UI 所需的所有数据。此类中的数据将替换 DessertClickerApp()
可组合函数当前管理的数据。
5. 创建 ViewModel
使用 Jetpack ViewModel 组件创建一个 ViewModel
类。您可以使用 ViewModel 管理 UI 状态。
6. 将应用逻辑和数据迁移到 ViewModel
将 MainActivity
中的逻辑迁移到 ViewModel,并使用您创建的 UI 状态类使 UI 状态数据可访问。删除 MainActivity
中的所有数据和状态管理逻辑。
尝试独立完成此任务。如有需要,请参考 Compose 中的 ViewModel 和状态 Codelab 获取指导。
7. 调用 ViewModel
使用 ViewModel 提供的数据和方法来驱动 MainActivity
中的 UI。