练习:向 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. 解决方案代码