如何从其他Activity获取ViewModel?

时间:2018-06-14 20:06:09

标签: android android-databinding android-viewmodel android-workmanager

我在我的应用上创建了一个登录活动。

我有一个Viewmodel + LiveData + DataBingind来更新TextView,并在用户尝试登录时显示有关所有后台工作进度的信息。

lateinit var loginViewModel: LoginViewModel

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    loginViewModel = ViewModelProviders.of(this).get(LoginViewModel::class.java)
    val binding = DataBindingUtil.setContentView(this, R.layout.login_activity) as LoginActivityBinding
    binding.viewModel = loginViewModel
    binding.setLifecycleOwner(this)
    ...
}

所有后台工作均由Workers

完成
val loginWork = OneTimeWorkRequestBuilder<LoginWorker>().setInputData(dataBuilder.build()).addTag("LOGIN").build()

val workManager = WorkManager.getInstance()
                workManager.beginUniqueWork("LOGIN", ExistingWorkPolicy.REPLACE, loginWork)
                        .enqueue()

我可以从LoginActivty访问和更新ViewModel,观察Worker的进度:

val statusLogeo: LiveData<WorkStatus> = workManager.getStatusById(loginWork.id)
                statusLogeo.observe(this, Observer {
                    if (it != null && it.state == State.FAILED)...

                    if (it != null && it.state == State.SUCCEEDED)...


                })

但是当procces失败State.FAILED或成功State.SUCCEEDED时,我只能访问Worker内的数据......

因此,例如,如果Worker中的所有工作持续10秒,我无法从登录Activy更新ViewModel,直到完成所有工作...但是如果我访问我可以在该过程中更新来自工作者活动的ViewModel

如何从其他Activity获取ViewModel?

如何从Worker活动中获取LoginWorkerViewModel(在LoginActivity中创建并为dataBinding设置)的相同实例?

0 个答案:

没有答案