【发布时间】:2017-11-18 19:18:25
【问题描述】:
LiveData 类具有以下优点:
...
始终保持最新数据:如果生命周期再次启动(例如活动从后台堆栈返回到已启动状态),它会接收最新的位置数据(如果尚未收到)。
但有时我不需要这个功能。
例如,我在 ViewModel 中有以下 LiveData,在 Activity 中有 Observer:
//LiveData
val showDialogLiveData = MutableLiveData<String>()
//Activity
viewModel.showMessageLiveData.observe(this, android.arch.lifecycle.Observer { message ->
AlertDialog.Builder(this)
.setMessage(message)
.setPositiveButton("OK") { _, _ -> }
.show()
})
现在每次旋转后都会出现旧对话框。
有没有办法在处理后清除存储的值,或者根本没有错误使用 LiveData?
【问题讨论】:
-
是否与实时数据问题有关?无论您是否使用 LiveData,每次旋转时都会重新创建活动。即使您将其删除,问题也会继续存在。
-
@LongRanger 可以通过在显示对话框后删除缓存在 LiveData 中的消息来解决,因此新活动将不会收到它。与 Moxy 的 OneExecutionStateStrategy 使用的原理相同
标签: android android-architecture-components android-livedata