首页 > 解决方案 > 属性更改后Android绑定适配器不会更改

问题描述

我为一个简单的掷骰子应用程序编写了一个代码,但是在更新与绑定适配器绑定的图像视图的图像时出现问题我无法扩展 BaseObservable 类,因为我已经扩展了 ViewModel 类。我需要在状态更改后保留数据。此外,我无法观察绑定适配器中的实时数据,因为该函数是静态的

你知道其他方法吗?

这是我的 xml 代码

<?xml version="1.0" encoding="utf-8"?>
<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>
    <variable
        name="viewModel"
        type="com.example.diceroller.MainActivityViewModel" />
</data>


<androidx.constraintlayout.widget.ConstraintLayout

    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <ImageView
        android:id="@+id/imgDice"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        android:imageRes="@{viewModel.drawableResource}" />

    <Button
        android:id="@+id/btnRoll"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="32dp"
        android:text="Roll the dice"
        android:onClick="@{() -> viewModel.onRollButtonClicked()}"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

这是我的 kotlin 代码

class MainActivityViewModel : ViewModel() , Observable {

@Bindable
var drawableResource : MutableLiveData<Int> = MutableLiveData<Int>()

init {
    drawableResource.value = R.drawable.dice_1
}

fun onRollButtonClicked(){
    drawableResource.value = when(Random.nextInt(1,7)){
        1 -> R.drawable.dice_1
        2 -> R.drawable.dice_2
        3 -> R.drawable.dice_3
        4 -> R.drawable.dice_4
        5 -> R.drawable.dice_5
        else -> R.drawable.dice_6
    }

}

override fun addOnPropertyChangedCallback(callback: Observable.OnPropertyChangedCallback?) {

}

override fun removeOnPropertyChangedCallback(callback: 
Observable.OnPropertyChangedCallback?) {
    }
}
@BindingAdapter("android:imageRes")
fun loadImage(view : View , imageRes : Int){
    (view as ImageView).setImageResource(imageRes)
}

标签: android

解决方案


推荐阅读