Android 数据绑定和 LiveData:无法绑定到 LiveData 中的值 属性
Android databinding and LiveData: Can't bind to value in LiveData property
我正在尝试对一个视图进行数据绑定,该视图应该显示通过视图模型中的 LiveData 属性 公开的数据,但我找不到将 LiveData 内的对象绑定到视图的方法。从 XML 我只能访问 LiveData 实例的值 属性,但不能访问其中的对象。我是不是遗漏了什么或者不可能?
我的视图模型:
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 对象中提取对象值的技巧是什么?
我的任务class:
@Entity(tableName = "tasks")
data class Task(val id: String,
val title: String,
val description: String?,
created: Date,
updated: Date,
assigned: String?)
为什么要对 TextView 使用两种方式绑定
android:text="@={viewmodel.task.value}"
而是像这样使用 android:text="@{viewmodel.task.title}"
为了 LiveData
使用 Android 数据绑定 ,您必须为绑定
设置 LifecycleOwner
binding.setLifecycleOwner(this)
并像使用 ObservableField
一样使用 LiveData
android:text="@{viewmodel.task}"
要实现此功能,Task
需要实施 CharSequence
。使用 viewmodel.task.toString()
也可能有效。要实现双向绑定,您必须改用 MutableLiveData
。
我正在尝试对一个视图进行数据绑定,该视图应该显示通过视图模型中的 LiveData 属性 公开的数据,但我找不到将 LiveData 内的对象绑定到视图的方法。从 XML 我只能访问 LiveData 实例的值 属性,但不能访问其中的对象。我是不是遗漏了什么或者不可能?
我的视图模型:
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 对象中提取对象值的技巧是什么?
我的任务class:
@Entity(tableName = "tasks")
data class Task(val id: String,
val title: String,
val description: String?,
created: Date,
updated: Date,
assigned: String?)
为什么要对 TextView 使用两种方式绑定
android:text="@={viewmodel.task.value}"
而是像这样使用 android:text="@{viewmodel.task.title}"
为了 LiveData
使用 Android 数据绑定 ,您必须为绑定
LifecycleOwner
binding.setLifecycleOwner(this)
并像使用 ObservableField
LiveData
android:text="@{viewmodel.task}"
要实现此功能,Task
需要实施 CharSequence
。使用 viewmodel.task.toString()
也可能有效。要实现双向绑定,您必须改用 MutableLiveData
。