【问题标题】:Notifying Activity From ViewModel从 ViewModel 通知 Activity
【发布时间】:2020-01-25 16:15:33
【问题描述】:

我是 MVVM android 的新手,我想制作一个简单的登录表单,其中包含 2 个电子邮件和密码输入字段、1 个登录按钮和 1 个进度条。我正在使用 viewmodel 使用绑定和 onclick 绑定从 XML 捕获电子邮件/密码的值,并调用 viewmodel 的 onclick 函数。所以基本上 viewmodel 现在正在监听 XML 中的所有内容。

我的问题是,我想在登录过程中显示一个进度条,因此想从 viewmodel 通知活动类“嘿,用户刚刚单击了该登录按钮,显示我们正在进行登录过程的进度条”或“嘿,现在在登录完成后导航到仪表板”或“嘿,我们有一个错误,显示一个错误警报对话框”。

我可以使用接口来包装活动并将其传递给 viewmodel,然后调用它的方法,但我不想使用这种方法,因为我相信它不是 MVVM。我应该在 viewmodel 中创建一个 Status 变量,然后从活动中观察它吗?

那么这里的解决方案是什么?

【问题讨论】:

    标签: android mvvm android-mvvm


    【解决方案1】:

    您可以在视图模型中使用实时数据。结帐示例代码。

    var btnClicked:MutableLiveData<Boolean> = MutableLivedata<Boolean>()
    

    在你的点击功能中使用这个

    fun onClick(){
      btnClicked.value = true
    }
    

    然后在活动中使用此代码显示进度条。

    viewModel.btnClicked.observe(this, Observer {
            showProgressbar();//You funtion to show the progress bar
        })
    

    【讨论】:

      【解决方案2】:

      您可以使用 LiveData 来实现它。创建一个实时数据变量,其值将由具有登录状态的视图模型方法更新,活动类将观察此实时数据变量以进行状态更新。

      【讨论】:

        猜你喜欢
        • 2020-04-06
        • 1970-01-01
        • 2021-04-16
        • 1970-01-01
        • 1970-01-01
        • 2012-08-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多