练习:将 ViewModel 添加到 Dessert Clicker

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. 创建界面状态类

目前,MainActivity 中的 DessertClickerApp() 可组合项包含驱动界面的数据和状态。

创建一个数据类,用于存储界面的所有必要数据。此类中的数据会替换 DessertClickerApp() 可组合项当前管理的数据。

5. 创建 ViewModel

使用 Jetpack ViewModel 组件创建 ViewModel 类。您可以使用 ViewModel 管理界面状态。

6. 将应用逻辑和数据转移到 ViewModel

MainActivity 中的逻辑转移到 ViewModel,并使用您创建的界面状态类使界面状态数据可访问。删除 MainActivity 中的所有数据和状态管理逻辑。

请尝试自行完成此任务。如有必要,请参考 Compose 中的 ViewModel 和状态 Codelab。

7. 调用 ViewModel

使用 ViewModel 提供的数据和方法在 MainActivity 中驱动界面。

8. 解决方案代码