Android 在Fragment'中使用活动视图模型;s布局与数据绑定

Android 在Fragment'中使用活动视图模型;s布局与数据绑定,android,kotlin,data-binding,viewmodel,androidx,Android,Kotlin,Data Binding,Viewmodel,Androidx,尝试使用数据绑定访问片段布局中的活动视图模型。我不确定我是否只是做错了什么,或者是什么根本不起作用 MainViewModel有一个名为_dateString的可变LiveData属性和一个名为getDateString()的函数,该函数返回该属性的LiveData private val _dateString = MutableLiveData<String>() fun getDateString(): LiveData<String> { return _

尝试使用数据绑定访问片段布局中的活动视图模型。我不确定我是否只是做错了什么,或者是什么根本不起作用

MainViewModel有一个名为_dateString的可变LiveData属性和一个名为getDateString()的函数,该函数返回该属性的LiveData

private val _dateString = MutableLiveData<String>()
fun getDateString(): LiveData<String> {
    return _dateString
}
无论出于何种原因,布局显示的按钮没有值。即使我更新了_dateString,绑定也不会显示更改后的字符串

如果我将相同的逻辑移动到CalendarViewModel中,它会显示并更新。如果在日历的片段代码中调用getDateString(),它将正确返回值


是否无法将多个视图模型连接到单个布局?还是我做错了什么。

我想我回答这个问题已经迟到了。无论如何,只需用这种方式编辑XML文件

        <Button
            android:id="@+id/header_title"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            style="@style/Widget.MaterialComponents.Button"
            android:text="@{mainModel._dateString}"/>

您可以这样封装ViewModel数据,以消除函数调用的需要:

private var _dateString = MutableLiveData<String>()
val dateString : LiveData<String>
    get() = _dateString
private var\u dateString=MutableLiveData()
val dateString:LiveData
get()=\u日期字符串
这允许您以
dateString
然后在XML中,您现在可以将文本的值分配给
@{mainmodel.dateString}
,并且该值将在每次更改时自动更新

        <Button
            android:id="@+id/header_title"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            style="@style/Widget.MaterialComponents.Button"
            android:text="@{mainModel._dateString}"/>
private var _dateString = MutableLiveData<String>()
val dateString : LiveData<String>
    get() = _dateString