Привязка данных с OnProgressChanged в SeekBar не работает - PullRequest
1 голос
/ 10 марта 2020

Я использую Seekbar с DataBinding и ниже мой код

<data>

    <variable
        name="generatePasswordModel"
        type="android.account.model.GeneratePasswordModel" />

</data>

 <SeekBar
       android:id="@+id/sbPasswordLength"
       android:layout_width="0dp"
       android:layout_height="wrap_content"
       android:layout_marginLeft="10dp"
       android:layout_marginRight="10dp"
       android:layout_weight="1"
            android:onProgressChanged="@{generatePasswordModel.onValueChanged()}"
       android:max="20"
       android:min="4" />

, а класс модели ниже

data class GeneratePasswordModel(
    private var seekValue: String,
    private var seekDisplay: String
) : BaseObservable() {


    var mSeekDisplay: String
        @Bindable get() = seekDisplay
        set(value) {
            seekDisplay = value
            notifyPropertyChanged(BR.mSeekDisplay)
        }

    fun onValueChanged(seekBar: SeekBar, progresValue: Int, fromUser: Boolean) {
        mSeekDisplay = progresValue.toString()
    }

}

Но я получаю следующую ошибку при сборке apk

ANTLR Tool version 4.5.3 used for code generation does not match the current runtime version 4.7.1ANTLR Runtime version 4.5.3 used for parser compilation does not match the current runtime version 4.7.1ANTLR Tool version 4.5.3 used for code generation does not match the current runtime version 4.7.1ANTLR Runtime version 4.5.3 used for parser compilation does not match the current runtime version 4.7.1/Users/amitsiddhpura/Documents/.../app/build/generated/source/kapt/debug/.../android/DataBinderMapperImpl.java:18: error: cannot find symbol


                                                 import android.databinding.ActivityGeneratePasswordBindingImpl;
22:40:06.432 [ERROR] [system.err]                                         ^
22:40:06.432 [ERROR] [system.err]   symbol:   class ActivityGeneratePasswordBindingImpl

1 Ответ

1 голос
/ 10 марта 2020

Ознакомьтесь с лучшим ответом на этот вопрос: Ошибка привязки данных Seekbar

Похоже, вам необходимо указать аргументы в XML:

android:onProgressChanged="@{(seekBar, value, fromUser)->generatePasswordModel.onValueChanged(seekBar, value, fromUser)}}

Но, поскольку вы на самом деле не используете seekBar или fromUser в своем коде Kotlin, вы можете изменить определение своей функции следующим образом:

fun onValueChanged(progresValue: Int) {
        mSeekDisplay = progresValue.toString()
    }

А затем XML будет выглядеть так:

android:onProgressChanged="@{(seekBar, value, fromUser)->generatePasswordModel.onValueChanged(value)}}
...