小编Che*_*eng的帖子

Android 数据绑定问题:表达式 XXX 不能反转

我是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

1
推荐指数
1
解决办法
3111
查看次数