Android数据绑定和LiveData:无法绑定到LiveData属性中的值

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)

tyn*_*ynn 8

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


Abr*_*hew 0

为什么你对 TextView 使用两种方式绑定 android:text="@={viewmodel.task.value}" 而不是像这样使用 android:text="@{viewmodel.task.title}"