我在 DialogFragment 中有一个 ViewSwitcher。切换器拥有 2 个视图,一个“1. 选择视图”和一个“2. 选择视图”。
初始视图默认为“1. 选择视图”。当观察事件数据库中的 fromType 非零时,我希望 Livedata 观察者调用 dialogViewSwitcher.showNext(),但在对话框初始化时不调用 showNext() 函数。
DialogFragment,在 onCreateDialog 内:
viewModel.event.observe(this, Observer {
it?.let {
viewModel.setCurrentFromType(it.fromPlaceType)
}
})
viewModel.currentFromType.observe(this, Observer {
if (it == 0) {
viewModel.setCurrentFromStatus(false)
} else {
viewModel.setCurrentFromStatus(true)
}
})
viewModel.currentFromStatus.observe(this, Observer {
binding.dialogViewSwitcher.showNext()
})
视图模型:
private val _currentFromType = MutableLiveData(0)
val currentFromType: LiveData<Int>
get() = _currentFromType
fun setCurrentFromType(fromType: Int) {
_currentFromType.value = fromType
}
private val _currentFromStatus = MutableLiveData(false)
val currentFromStatus: LiveData<Boolean>
get() = _currentFromStatus
fun setCurrentFromStatus(status: Boolean) {
_currentFromStatus.value = status
}
日志显示当对话框打开时 currentFromStatus 观察到的变化(从 false 到 true),但我认为因为在观察到 currentFromStatus 的变化时 dialogViewSwitcher 尚未在 onCreatDialog 内初始化,所以 showNext() 什么也没做。我还查看了数据绑定,并没有在 xml 中找到显示第二个视图的 ViewSwitcher 属性。我应该怎么做才能解决这种行为?