我正在尝试对一个 View 进行数据绑定(bind),该 View 应该显示通过 View 模型中的 LiveData 属性公开的数据,但我发现无法将 LiveData 内的对象绑定(bind)到 View 。从 XML 我只能访问 LiveData 实例的 value 属性,但不能访问其中的对象。我错过了什么还是不可能?
我的 View 模型:
class TaskViewModel @Inject
internal constructor(private val taskInteractor: taskInteractor)
: ViewModel(), TaskContract.ViewModel {
override val selected = MutableLiveData<Task>()
val task: LiveData<Task> = Transformations.switchMap(
selected
) { item ->
taskInteractor
.getTaskLiveData(item.task.UID)
}
... left out for breivety ...
}
我试图在我的 View 中绑定(bind)任务对象的值,但是当试图在我的 View 中设置我的任务的值时,我只能做
android:text="@={viewmodel.task.value}"
.我无权访问我的任务对象的字段。在 LiveData 对象中提取对象值的技巧是什么?我的任务类:
@Entity(tableName = "tasks")
data class Task(val id: String,
val title: String,
val description: String?,
created: Date,
updated: Date,
assigned: String?)
最佳答案
对于 LiveData
要使用 Android 数据绑定(bind),您必须设置 LifecycleOwner
用于绑定(bind)
binding.setLifecycleOwner(this)
并使用
LiveData
好像是 ObservableField
android:text="@{viewmodel.task}"
为此,
Task
需要执行CharSequence
.使用 viewmodel.task.toString()
可能也有效。要实现双向绑定(bind),您必须使用 MutableLiveData
反而。
关于Android 数据绑定(bind)和 LiveData : Can't bind to value in LiveData property,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53308863/