问题
使用DataBinding绑定到布局的MediatorLiveData永远不会处于活动状态,因此不会考虑其源更改
我要做什么
我正在使用DataBinding将ViewModel的MediatorLiveData的值双向绑定到SeekBars进度,如下所示:
<SeekBar
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:max="@{ShaderParameterValue.SEEKBAR_MAX}"
android:progress="@={parameter.value.basisPoint}"/>
basepointPoint字段定义如下
val basisPoint: MediatorLiveData<Int> = object: MediatorLiveData<Int>(){
override fun setValue(value: Int?) {
super.setValue(value)
value?.let { updateCurrentValue(it) }
}
}.also {
it.addSource(startValue) { value ->
calculateBasisPoint(it)
}
it.addSource(currentValue) { value ->
calculateBasisPoint(it)
}
calculateBasisPoint(it)
}
我发现的东西
我要添加两个源,但是由于LiveData从未像调试器所验证的那样处于活动状态,因此从未调用calculateBasisPoint
。
当我将自己的观察者(下面)添加到basePoint字段中时,代码将按预期工作。
it.value.basisPoint.observe(this@GLActivity, Observer {
Log.d(TAG, "basisPoint " + it)
});
当SeekBar值更改时,DataBinding还可以正确更新basePoint。
DataBinding是否将MediatorLiveData标记为活动状态?这是一个错误,还是我在这里误会了什么?
我不确定在哪里可以找到用于SeekBar绑定的DataBinding源以验证逻辑,但是我认为它应该像往常一样使用LiveData的观察,所以我看不出这里可能出什么问题。