练习:向 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 和状态 代码实验室以获取指导。

7. 调用 ViewModel

使用 ViewModel 提供的数据和方法来驱动 MainActivity 中的 UI。

8. 解决方案代码