我正在尝试使用dataBinding在Kotlin中构建Android应用程序,当我尝试编译此代码时
@Bindable
var progress:Int=1
@NotNull
@InverseBindingAdapter(attribute = "progress")
fun SeekBar.getProgress():Int{
return this.progress
}
@BindingAdapter(value = ["progressAttrChanged"])
fun setListeners(seekBar: SeekBar,inverseBindingListener: InverseBindingListener){
var listener=object: SeekBar.OnSeekBarChangeListener{
override fun onProgressChanged(seekBar: SeekBar?, Progress: Int, fromUser: Boolean) {
progress=Progress
mBeatBox.mRange=progress/66.67 as Float
inverseBindingListener.onChange()
}
override fun onStartTrackingTouch(seekBar: SeekBar?) {
}
override fun onStopTrackingTouch(seekBar: SeekBar?) {
}
}
seekBar.setOnSeekBarChangeListener(listener)
}
我收到此错误https://ibb.co/cBHRwx。
以下是modelView
的视图 <data>
<variable
name="viewModel"
type="com.bignerdranch.android.beatboxkotlin.Models.BeatBoxViewModel"/>
</data>
....
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:text="progres"
android:gravity="center"
android:layout_weight="9"/>
<android.support.v7.widget.AppCompatSeekBar
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="9"
app:progress="@={viewModel.progress}"/>
我该如何解决这个问题?
答案 0 :(得分:1)
我用这种方式解决了这个错误
更新了viewModel `
var progress:Int=mBeatBox.mRange.toInt()
@Bindable set(value){field=value;notifyChange()}
@Bindable get()=field
fun getEditListener():SeekBar.OnSeekBarChangeListener{
var listener=object: SeekBar.OnSeekBarChangeListener{
override fun onProgressChanged(seekBar: SeekBar?, Progress: Int, fromUser: Boolean) {
progress=Progress
mBeatBox.mRange=(progress/66.67).toFloat()
}
override fun onStartTrackingTouch(seekBar: SeekBar?) {
}
override fun onStopTrackingTouch(seekBar: SeekBar?) {
}
}
return listener
}`
View看起来像:
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:text="progress"
android:gravity="center"
android:layout_weight="9"
android:text="@{String.valueOf(viewModel.progress)}"/>
<android.support.v7.widget.AppCompatSeekBar
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="9"
app:OnSeekBarChangeListener="@{viewModel.EditListener}"/>
答案 1 :(得分:0)
不确定您的错误指向的是什么,但看起来库中已经定义了SeekbarBindingAdapter
,因此您可能不需要定义自己的错误。如果您想在progress
更改时更新内容,请覆盖set
或将ObservableInt
与OnPropertyChangedCallback