【发布时间】:2018-11-14 21:18:22
【问题描述】:
我正在尝试为视图进行数据绑定,该视图应该显示通过视图模型中的 LiveData 属性公开的数据,但我发现无法将 LiveData 内的对象绑定到视图。从 XML 我只能访问 LiveData 实例的 value 属性,但不能访问其中的对象。我错过了什么还是不可能?
我的视图模型:
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 ...
}
我正在尝试在我的视图中绑定任务对象的值,但是当尝试在我的视图中设置我的任务的值时,我只能执行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?)
【问题讨论】:
-
为什么要为 TextView 使用两种方式绑定
-
因为我想保存对任务所做的更改,只要用户在 UI 中对任务进行更改。
-
那么你有一个问题,
task在任何情况下都不可变。 -
@tynn 只有在任务可变的情况下才有效?
-
您必须观察片段内的实时数据变量才能获得更改
标签: android android-databinding android-livedata android-viewmodel