我在一个DialogFragment里面有一个ViewSwitcher。这个切换器有两个视图,一个是 "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()
})
ViewModel:
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的变化时,在onCreatDialog里面,dialogViewSwitcher还没有初始化,所以showNext()没有任何作用。我还研究了数据绑定,在xml中没有找到一个显示第二个视图的ViewSwitcher属性。我应该怎么做才能解决这个行为?
在onCreate时没有找到一个好的方法来编程显示Next()。相反,我删除了viewswitcher,并对2个子视图的可见性分别使用databinding,这种方式效果很好。