gpt4 book ai didi

android - xml中的数据绑定(bind) slider

转载 作者:行者123 更新时间:2023-12-03 10:56:11 25 4
gpt4 key购买 nike

我正在使用 MVVM 开发一个应用程序,并且已经成功地添加了简单的 ui 元素,如按钮和文本输入,但现在我试图弄清楚如何绑定(bind) material slider .

我一直在阅读 listener bindings虽然一目了然的 xml 似乎让我 dp 下面的 app:onChange 类似于您将在我的“查看 Activity ”类中看到的 addOnChangeListener(它将与 kotlin 文件中的 addOnChangeListener 一起使用,但我无法使其与 xml 文件中的直接 app:onChange 标记一起使用。

任何可以为我指明正确方向的建议或代码示例将不胜感激。谢谢你。

/* xml布局文件 */

<com.google.android.material.slider.Slider
android:id="@+id/material_slider_min_temperature"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:valueFrom="1"
android:valueTo="2"
android:stepSize="1"
app:onChange="@{(slider, value, fromUser)-> mViewModel.fireSliderMinRQ(slider,value,fromUser)}"/>

/* 查看模型 */
fun fireSliderMinRQ(slider: Slider, value: Float, fromUser: Boolean){
//this will not bind correctly, i can't compile and access the parameters
}

/* 查看 Activity */
this.mSliderMinTemperature!!.addOnChangeListener { slider, value, fromUser ->
this.mTvMinTemperature.text = value.toInt().toString()
slider.setOnTouchListener { v, event ->
when(event.action){
MotionEvent.ACTION_UP -> {
this.mSliderMaxTemperature!!.isEnabled = true
}
}
false
}
}

最佳答案

您可以使用@BindingAdapter .

    @JvmStatic
@BindingAdapter(value = ["onValueChangeListener"])
fun setOnValueChangeListener(slider: Slider, listener: OnValueChangeListener) {
slider.addOnChangeListener { _: Slider?, value: Float, _: Boolean ->
listener.onValueChanged(value)
}
}


interface OnValueChangeListener {
fun onValueChanged(value: Float)
}
在 XML 中:
   <com.google.android.material.slider.Slider
android:id="@+id/slider"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:onValueChangeListener="@{(value)-> vm.onValueChanged(value)}" />
在您的 View 模型中:
   fun onValueChanged(value: Float) {
// use slider's value
}
绑定(bind) Slider 和 TextView:

this.mTvMinTemperature.text = value.toInt().toString()


将 slider 的值设置为 TextView 的文本:
@JvmStatic
@BindingAdapter(
value = [
"textViewLabel",
"valueFormat"
], requireAll = false
)
fun setTextViewLabel(
slider: Slider,
textViewLabel: TextView,
valueFormat: String?
) {
slider.addOnChangeListener { _: Slider?, value: Float, _: Boolean ->
valueFormat
?.let { format ->
textViewLabel.text = String.format(format, value)
}
?: let { textViewLabel.text = value.toString() }
}
}
将 XML 添加到 Slider:
app:textViewLabel="@{yourTextViewId}"
此外,您也可以使用 @BindingAdapter 通过 XML 设置 OnTouchListener。

关于android - xml中的数据绑定(bind) slider ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59924065/

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