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. 创建界面状态类
目前,MainActivity
中的 DessertClickerApp()
可组合项包含驱动界面的数据和状态。
创建一个数据类,用于存储界面的所有必要数据。此类中的数据会替换 DessertClickerApp()
可组合项当前管理的数据。
5. 创建 ViewModel
使用 Jetpack ViewModel 组件创建 ViewModel
类。您可以使用 ViewModel 管理界面状态。
6. 将应用逻辑和数据转移到 ViewModel
将 MainActivity
中的逻辑转移到 ViewModel,并使用您创建的界面状态类使界面状态数据可访问。删除 MainActivity
中的所有数据和状态管理逻辑。
请尝试自行完成此任务。如有必要,请参考 Compose 中的 ViewModel 和状态 Codelab。
7. 调用 ViewModel
使用 ViewModel 提供的数据和方法在 MainActivity
中驱动界面。