我是android数据绑定的新手。我想将多个 SeekBars 绑定到一个浮点数集合,例如
SeekBar1.progress <---> modelArray[0]
SeekBar2.progress <---> modelArray[1]
...
Run Code Online (Sandbox Code Playgroud)
由于SeekBar的进度是Int类型,我觉得用Converter会更好,下面是转换器代码:
import android.databinding.InverseMethod
import android.util.Log
import kotlin.math.roundToInt
class Converter {
@InverseMethod("progressToFloat")
fun floatToProgress(value: Float): Int {
val result = (value * 100.0f).roundToInt()
Log.i("MODEL", "convert $value to $result(Int)")
return result
}
fun progressToFloat(value: Int): Float {
return value.toFloat()/100.0f
}
}
Run Code Online (Sandbox Code Playgroud)
模型结构如下所示:
class Model {
val params by lazy {
ObservableArrayMap<Int, Float>()
}
//....
}
Run Code Online (Sandbox Code Playgroud)
我的xml如下:
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data class="MyBinding">
<variable name="Converter" type="com.mypackage.model.Converter"></variable>
<variable
name="Converter"
type="com.mypackage.model.Converter"></variable>
<variable
name="model"
type="com.mypackage.model.Model"></variable>
</data> …
Run Code Online (Sandbox Code Playgroud) data-binding android kotlin android-databinding two-way-binding