android - 属性更改后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)
}
解决方案
推荐阅读
- c++ - qt 图表删除标题/图例/的空间
- java - 为什么在自定义列表视图中不能与 setOnItemClickListner 一起使用?
- https - python anaconda requests.get(url) 适用于 http 但不适用于 https,出现 ProxyError: HTTPSConnectionPool
- php - Laravel 调度程序 - 在特定时间运行每月的特定日期
- windows - AUDIO_STREAM_CATEGORY 需要多个 XAudio2 实例?
- java - Https / ssl post方法在开发人员机器上工作但在服务器上不起作用 - java
- eclipse - 无法扩展帮助菜单
- powershell - 执行 Windows Powershell 命令将文本复制到剪贴板(包括`r`n')
- stanford-nlp - CRFClassifier:从流中加载模型给出异常“无效的流标头:1F8B0800”
- oracle - 从数组插入数据时如何解决Oracle下标超出计数错误?