0

我在 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 属性。我应该怎么做才能解决这种行为?

4

1 回答 1

0

没有找到在 onCreate 以编程方式显示 Next() 的好方法。相反,我删除了视图切换器并在 2 个子视图中的每一个的可见性上使用数据绑定,这种方式效果很好。

于 2020-05-20T13:09:25.550 回答