在重新加载期间忽略MutableLiveData中的更改

时间:2018-08-08 21:30:32

标签: android android-fragments events

我有这个Android应用程式,里面有4个片段的活动 每个片段都是一个屏幕,每个片段都有自己的VM(我们使用viewModelProvider 与包含这4个片段的活动有关)。

您在底部有4个图标,它们使您可以在屏幕之间进行切换。

由于客户的需求,如果您终止了该应用程序,则在重新启动该应用程序时, 与它被杀死时一样。

因此,每次用户执行操作时,每个屏幕的内容都存储在数据库中。

我的问题是,屏幕4正在观察屏幕3中的微调器(每次此微调器更改一个 在屏幕3的VM中MutableLiveData"ScreenTreeSpinnerPosition"已更新)

当此微调器位置更改时,屏幕4应该会重置自己。

但是,当您从一次杀戮中回来时,如果您首先选择第三个屏幕,它将从 数据库,这样做会将微调器移动到其先前位置。 然后,此微调器的OnChange然后更新MutableLiveData,然后看到屏幕4 MutableLiveData使自己复位。

如何避免这种情况?

我尝试通过这种方式使用布尔值:

sharedVM.setUpdateFromDbInProgress(true)
updateSpinner() //update the spinner position and the OnChange of the spinner sets the `MutableLiveData` value
sharedVM.setUpdateFromDbInProgress(false)

为了让屏幕4知道不能对此MutableLiveData进行更改,但是MutableLiveData事件在sharedVM.setUpdateFromDbInProgress(false)之后触发,因此布尔值是无用的。

您将如何解决这个问题?

谢谢。

0 个答案:

没有答案