我有这个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)
之后触发,因此布尔值是无用的。
您将如何解决这个问题?
谢谢。