练习:将 ViewModel 添加到 Dessert Clicker

练习:向 Dessert Clicker 添加 ViewModel

เกี่ยวกับ Codelab นี้

subjectอัปเดตล่าสุดเมื่อ ก.ย. 21, 2023
account_circleเขียนโดย Google Developers 培训团队

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 中驱动界面。