实践:向 Dessert Clicker 添加 ViewModel

1. 开始之前

简介

Dessert Clicker 使用内联状态和数据。在本练习中,您将移除 MainActivity 中的内联状态、数据和逻辑,并将其移至 ViewModel

将应用逻辑从视图中抽象出来并移至 ViewModel 是 Android 开发中的一种现代实践。这种实践带来了以下益处

  • 代码对其他开发者来说更具可读性。
  • 代码更具可测试性。
  • 多名开发者可以同时在一个应用上工作,而互不干扰。

解决方案代码可在文末找到,但请先尝试完成练习,然后再查看答案。可以将解决方案视为实现应用的一种方式。

前提条件

准备工作

  • 一台已安装 Android Studio 并可访问互联网的计算机
  • Dessert Clicker 应用的解决方案代码

您将构建的应用

在本练习中,您将通过添加 ViewModel 来处理数据和应用逻辑,从而改进 Dessert Clicker 应用的架构。

本练习分为多个部分,您将依次完成以下步骤

  • 更新并添加必要的依赖项。
  • 创建 ViewModel 类。

2. 下载入门代码

  1. 在 Android Studio 中,打开 basic-android-kotlin-compose-training-dessert-clicker 文件夹。
  2. 在 Android Studio 中打开 Dessert Clicker 应用代码。

3. 设置依赖项

  1. 将以下变量添加到您的项目 build.gradle 文件中
buildscript {
   ext {
       ...
       lifecycle_version = '2.5.1'
   }
}
  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。

8. 解决方案代码