【问题标题】:How to use multiple viewmodels in single fragment in Android?如何在 Android 的单个片段中使用多个视图模型?
【发布时间】:2019-12-05 12:10:57
【问题描述】:

假设我有 DashboadFragment,它有自己的 ViewModel,名为 DashboadViewModel。我为AutoCompleteTextView 创建了单独的布局,它包含在fragment_dashboard.xml 文件中。我为AutoCompleteTextView 创建了单独的ViewModel,即AutoCompleteTextViewViewModel。所以在这里我尝试观察将AutoCompleteTextView 输入到DashboardFragment 中的数据,但它没有用。

我最近开始使用 MVVM 模式进行开发。

【问题讨论】:

  • 在您的场景中,请不要创建这种原子性的视图模型 - 只需使用托管片段的视图模型进行操作。
  • 是的,但实际上,它的通用布局并用于整个应用程序。所以我必须创建通用的 ViewModel 以便它可以与其他 Fragment 的 ViewModel 一起使用。
  • 这对可组合性很有意义,就像您的用例一样。我们不要忘记 ViewModel 只是一个无头片段,用于帮助整理代码并使业务逻辑可用于测试。具有相同生命周期的 ViewModel 理论上可以毫无问题地引用具有完全相同生命周期的另一个 ViewModel(尽管我会避免这样的紧耦合)。请提供有关您的具体问题的更多代码,它可以工作,这取决于您如何处理它。

标签: android-fragments viewmodel autocompletetextview android-mvvm mutablelivedata


【解决方案1】:

您可以使用委托视图模型在 Fragment 之间传递数据

private val viewModel: ListViewModel by viewModels({requireParentFragment()})

这确实意味着您的dashboardFragment 中有一个AutoCompleteTextViewViewModel。

另一个解决方案是使用setFragmentResult()API

https://developer.android.com/guide/fragments/communicate#share_data_between_a_parent_and_child_fragmenthttps://developer.android.com/guide/fragments/communicate#fragment-result了解更多信息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-19
    • 1970-01-01
    相关资源
    最近更新 更多