如何通过数据绑定使用 mvvm 模式
How to use mvvm pattern using databinding
我正在开发一个有登录的应用程序 form.I 我对模式有点困惑,因为我不明白我将如何打开新的 activity 因为我的登录是successful.As 根据我的理解,当我点击提交按钮时,viewmodel 中的一个方法将被调用,在我成功登录后,我不知道如何将它导航到 activity 文件,以便我可以调用新的 activity.
为此,您可以使用提供应用程序上下文的 AndroidViewModel,然后使用意图导航到新的 activity。
您可以简单地在 activity 中实现点击侦听器并从那里处理打开新的 activity。据我所知,ViewModel 应该只用于持久化数据或与 Repository/model 进行其他通信。它不应该用于导航。
尽管如果您想使用,您可以使用 AndroidViewModel class,它提供了一个上下文对象,可用于导航到另一个 activity/fragment。
拇指法则:
来自 android.* 的包不应位于 ViewModel 中。您可以忽略 ViewModel 的包导入
此外,您也可以使用普通的 ViewModel 来完成。
如何进行?
让我们简单点。假设,你正在制作登录页面。
让 ViewModel 本身有以下内容:
- 双向绑定的电子邮件和密码字段
- 表单验证逻辑
- 按钮点击事件
- Api 调用
所有这些都在您的 ViewModel 中。
现在,您的 Activity 需要对 Api 调用的结果做出反应。因此,让您的 ViewModel 有一个单独的 LiveData,其中 T 是来自 Api 调用的响应类型。
例如:
val loginApiStatus = MutableLiveData<LoginResponse>()
然后,让你的 Activity 观察这个 LiveData。应该在Activity的onStart()
方法中观察。我会在onStart()
告诉你观察的原因。
viewModel.loginApiStatus.observe(this, Observer{ loginResponse->
// respond accordingly
})
现在,一旦您收到来自 Api 的响应,只需将 ViewModel 中的 LiveData 更新为:
loginApiStatus.value = loginResponse // Login Api Response
使用此结构,您可以完全控制 Api 响应的处理。即使您的 activity 进入后台,在启动 Api 调用后,您仍然会看到 Api 调用发生的情况。现在,当你从后台再次 return 到登录屏幕时,你会再次开始观察 LiveData(因为正如我之前所说,我们正在观察 onStart()
中的状态 LiveData),你将得到状态以做出反应
当您开始在 ViewModel 本身中存储视图/片段/Activity 的状态时,生活会变得容易得多。
我正在开发一个有登录的应用程序 form.I 我对模式有点困惑,因为我不明白我将如何打开新的 activity 因为我的登录是successful.As 根据我的理解,当我点击提交按钮时,viewmodel 中的一个方法将被调用,在我成功登录后,我不知道如何将它导航到 activity 文件,以便我可以调用新的 activity.
为此,您可以使用提供应用程序上下文的 AndroidViewModel,然后使用意图导航到新的 activity。
您可以简单地在 activity 中实现点击侦听器并从那里处理打开新的 activity。据我所知,ViewModel 应该只用于持久化数据或与 Repository/model 进行其他通信。它不应该用于导航。
尽管如果您想使用,您可以使用 AndroidViewModel class,它提供了一个上下文对象,可用于导航到另一个 activity/fragment。
拇指法则:
来自 android.* 的包不应位于 ViewModel 中。您可以忽略 ViewModel 的包导入
此外,您也可以使用普通的 ViewModel 来完成。
如何进行?
让我们简单点。假设,你正在制作登录页面。
让 ViewModel 本身有以下内容:
- 双向绑定的电子邮件和密码字段
- 表单验证逻辑
- 按钮点击事件
- Api 调用
所有这些都在您的 ViewModel 中。
现在,您的 Activity 需要对 Api 调用的结果做出反应。因此,让您的 ViewModel 有一个单独的 LiveData,其中 T 是来自 Api 调用的响应类型。
例如:
val loginApiStatus = MutableLiveData<LoginResponse>()
然后,让你的 Activity 观察这个 LiveData。应该在Activity的onStart()
方法中观察。我会在onStart()
告诉你观察的原因。
viewModel.loginApiStatus.observe(this, Observer{ loginResponse->
// respond accordingly
})
现在,一旦您收到来自 Api 的响应,只需将 ViewModel 中的 LiveData 更新为:
loginApiStatus.value = loginResponse // Login Api Response
使用此结构,您可以完全控制 Api 响应的处理。即使您的 activity 进入后台,在启动 Api 调用后,您仍然会看到 Api 调用发生的情况。现在,当你从后台再次 return 到登录屏幕时,你会再次开始观察 LiveData(因为正如我之前所说,我们正在观察 onStart()
中的状态 LiveData),你将得到状态以做出反应
当您开始在 ViewModel 本身中存储视图/片段/Activity 的状态时,生活会变得容易得多。