gpt4 book ai didi

android - 在 Fragment 的布局中使用 Activity ViewModel 和数据绑定(bind)

转载 作者:行者123 更新时间:2023-12-02 12:03:19 24 4
gpt4 key购买 nike

尝试使用数据绑定(bind)访问 fragment 布局中的 Activity View 模型。我不确定我是否只是做错了什么,或者它只是不起作用。

MainViewModel 有一个名为 _dateString 的 MutableLiveData 属性,以及一个名为 getDateString() 的函数,该函数返回该属性的 LiveData。

private val _dateString = MutableLiveData<String>()
fun getDateString(): LiveData<String> {
return _dateString
}

然后在日历 fragment 的布局中调用该函数。我在布局的数据部分有 mainModel 和 viewModel。 (我去掉了大部分布局,这样更容易阅读)
<layout
xmlns:tools="http://schemas.android.com/tools" xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<import type="android.view.View" />
<variable
name="mainModel"
type="{path}.features.main.MainViewModel" />
<variable
name="viewModel"
type="{path}.features.main.calendar.CalendarViewModel" />
</data>

<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:animateLayoutChanges="true">

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

</androidx.constraintlayout.widget.ConstraintLayout>

然后在 fragment 本身中绑定(bind)变量
binding = FragCalendarBinding.inflate(inflater, container, false).apply {
viewModel = model
mainModel = mainModel
listener = this@CalendarFragment
lifecycleOwner = this@CalendarFragment
}

无论出于何种原因,布局都会显示没有值的按钮。即使我更新了 _dateString,绑定(bind)也不会显示更改后的字符串。

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

您只是无法将多个 View 模型连接到单个布局吗?或者我在这里做错了什么。

最佳答案

我想我回答这个问题迟到了。无论如何,只需以这种方式编辑您的 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}"/>

关于android - 在 Fragment 的布局中使用 Activity ViewModel 和数据绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57416705/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com