gpt4 book ai didi

android - 如何为 RangeSlider(valueFrom 和 valueTo)使用 Databinding 和 LiveData

转载 作者:行者123 更新时间:2023-12-05 04:46:56 27 4
gpt4 key购买 nike

我有以下 RangeSlider我正在使用 DataBinding 来提供 slider 的最小值/最大值,因为当用户在屏幕上时它可能会发生变化。

RangeSlider

layout.xml

<layout ...>
<data>

<variable
name="item"
type="MyDataItem" />
</data>

...

<com.google.android.material.slider.RangeSlider
android:id="@+id/my_slider"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:stepSize="1"
android:valueFrom="@{item.minimum}"
android:valueTo="@{item.maximum}"
... />
</layout>

我的数据项:

data class MyDataItem() {
val minimum = MutableLiveData(Int.MIN_VALUE)
val maximum = MutableLiveData(Int.MAX_VALUE)
}

但是,每当应用程序试图膨胀 View 时,我都会得到 java.lang.IllegalStateException: valueFrom(0.0) must be smaller than valueTo(0.0)

最佳答案

这是一个完整的解决方案,如何使用 RangeSlider 实现双向数据绑定(bind)

ViewModel/Presenter:

var sliderRange = MutableLiveData<List<Float>>().apply { value = listOf(5f, 90f) }

把你的初始数据放在那里

然后,布局:

<com.google.android.material.slider.RangeSlider
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:stepSize="1"
android:valueFrom="1"
android:valueTo="100"
app:values="@={vm.sliderRange}" />

最后是如何把东西放在一起; BindingAdapterInverseBindingAdapter :

@InverseBindingAdapter(attribute = "values")
fun getRangeSlider(slider: RangeSlider): List<Float> {
return slider.values
}

@BindingAdapter("app:valuesAttrChanged")
fun setListeners(
slider: RangeSlider,
attrChange: InverseBindingListener
) {
val listener = RangeSlider.OnChangeListener { _, _, _ -> attrChange.onChange() }
slider.addOnChangeListener(listener)
}

祝你好运,'。

关于android - 如何为 RangeSlider(valueFrom 和 valueTo)使用 Databinding 和 LiveData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68687651/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com