1. 开始之前
介绍
Dessert Clicker 使用内联状态和数据。在本练习中,您将从 MainActivity 中移除内联状态、数据和逻辑,并将它们移到一个 ViewModel
中。
将应用程序逻辑从视图抽象到 ViewModel 是 Android 开发的现代实践。这种做法有以下好处
- 代码对其他开发者来说更易读。
- 代码更易于测试。
- 多个开发者可以同时开发应用程序,而不会干扰其他开发者的工作。
解决方案代码位于结尾,但请在查看答案之前尝试解决练习。将解决方案视为实现应用程序的一种方式。
先决条件
- 通过 Compose 中的 ViewModel 和状态 codelab 完成 Android 基础 Compose 课程
您需要什么
- 一台具有互联网连接和已安装 Android Studio 的计算机
- Dessert Clicker 应用程序的解决方案代码
您将构建什么
在这些练习问题中,您将通过添加一个 ViewModel
来处理数据和应用程序逻辑,从而改进 Dessert Clicker 应用程序的架构。
练习问题分为几个部分,您将分别完成以下步骤
- 更新和添加必要的依赖项。
- 创建一个
ViewModel
类。
2. 下载入门代码
- 在 Android Studio 中,打开
basic-android-kotlin-compose-training-dessert-clicker
文件夹。 - 在 Android Studio 中打开 Dessert Clicker 应用程序代码。
3. 设置依赖项
- 将以下变量添加到您的项目
build.gradle
文件中
buildscript {
ext {
...
lifecycle_version = '2.5.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。