如何使用数据绑定使用mvvm模式

时间:2018-12-05 09:24:53

标签: android android-mvvm

我正在开发一个具有登录表单的应用程序。我对模式有点困惑,因为我不知道如何在成功登录后打开新活动。单击提交按钮,将在viewmodel中的方法中进行身份验证,该方法将被调用,并且在成功登录后,我不知道如何将其导航到活动文件,以便可以调用新活动。

3 个答案:

答案 0 :(得分:5)

拇指法则:

没有来自android。*的包应该位于ViewModel中。您可以忽略ViewModel的包导入

此外,您也可以使用普通的ViewModel来做到这一点。

如何进行?

让它变得简单。假设您正在创建“登录”页面。

在ViewModel本身中包含以下内容:

  • 具有双向绑定的电子邮件和密码字段
  • 表单验证逻辑
  • 按钮点击事件
  • Api通话

所有这些都在您的ViewModel中。

现在,您的活动需要对Api通话的结果做出反应。因此,让您的ViewModel具有单独的LiveData,其中T是您的Api调用的响应类型。

例如:

val loginApiStatus = MutableLiveData<LoginResponse>()

然后,让您的活动观察此LiveData。应该在“ onStart()”活动方法中观察到。我将告诉您为什么要在onStart()中进行观察。

viewModel.loginApiStatus.observe(this, Observer{ loginResponse->
    // respond accordingly
})

现在,一旦收到来自Api的响应,只需将ViewModel中的LiveData更新为:

loginApiStatus.value = loginResponse // Login Api Response

使用此结构,您可以完全控制处理Api响应。即使您的活动进入后台,启动Api Call之后,您仍然可以了解该Api调用发生了什么情况。现在,当您从后台再次返回“登录”屏幕时,您将再次开始观察LiveData(因为正如我们之前所说,我们正在观察onStart()中的LiveData状态),您将对该状态做出反应。

当您开始在ViewModel本身中存储View / Fragment / Activity的状态时,生活变得容易得多。

答案 1 :(得分:0)

为此,您可以使用提供应用程序上下文的AndroidViewModel,然后使用Intent导航到新活动。

答案 2 :(得分:0)

您可以简单地在活动中实现点击侦听器并从那里处理打开新活动。据我所知,ViewModel仅应用于持久存储数据或与存储库/模型进行其他通信。它不应该用于导航。

尽管要使用它,也可以使用AndroidViewModel类,该类提供了一个上下文对象,可用于导航到另一个活动/片段。