Boh*_*sen 0 android android-databinding android-livedata android-viewmodel
我正在尝试对应该显示通过ViewModel中的LiveData属性公开的数据的视图进行数据绑定,但是我没有找到将LiveData中的对象绑定到视图的方法。从XML中,我只能访问LiveData实例的value属性,而不能访问其中的对象。我错过了什么吗?
我的ViewModel:
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 ...
}
Run Code Online (Sandbox Code Playgroud)
我试图将任务对象的值绑定到我的视图中,但是当尝试在我的视图中设置任务的值时,我只能这样做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?)
Run Code Online (Sandbox Code Playgroud)
要LiveData使用Android数据绑定,您必须设置LifecycleOwner绑定
binding.setLifecycleOwner(this)
Run Code Online (Sandbox Code Playgroud)
并使用LiveData好像ObservableField
android:text="@{viewmodel.task}"
Run Code Online (Sandbox Code Playgroud)
为此,Task需要实施CharSequence。使用viewmodel.task.toString()也可能有效。要实现双向绑定,您必须使用MutableLiveData。
为什么你对 TextView 使用两种方式绑定
android:text="@={viewmodel.task.value}"
而不是像这样使用 android:text="@{viewmodel.task.title}"
| 归档时间: |
|
| 查看次数: |
1274 次 |
| 最近记录: |