Android 在Fragment'中使用活动视图模型;s布局与数据绑定
尝试使用数据绑定访问片段布局中的活动视图模型。我不确定我是否只是做错了什么,或者是什么根本不起作用 MainViewModel有一个名为_dateString的可变LiveData属性和一个名为getDateString()的函数,该函数返回该属性的LiveDataAndroid 在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 _
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