【问题标题】:How can I share the ViewModel between multiple fragments如何在多个片段之间共享 ViewModel
【发布时间】:2020-07-31 17:21:07
【问题描述】:

这是我的 SessionViewModel 工厂

class SessionViewModelFactory(
    private val sessionId: String
) : ViewModelProvider.NewInstanceFactory() {

    @Suppress("unchecked_cast")
    override fun <T : ViewModel?> create(modelClass: Class<T>): T {
        return if (modelClass.isAssignableFrom(SessionViewModel::class.java)) {
            SessionViewModel(
                sessionId = sessionId,
                sessionRepository = SessionRepository(
                    WebserviceGenerator.webservice,
                    AppDatabase.getDatabase()?.questionDao()
                )
            ) as T
        } else {
            throw IllegalArgumentException("ViewModel Not Found")
        }
    }
}

我希望 SessionViewModel 在具有相同 sessionId 的所有片段之间共享。

示例: 假设我们有如下片段 片段 #1 的 sessionId 为“a”。 片段 #2 的 sessionId 为“a”。 片段 #3 的 sessionId 为“b”。 片段 #4 的 sessionId 为“b”。

那么, Fragment #1 和 Fragment #2 应该具有相同的 SessionViewModel 实例。 Fragment #3 和 Fragment #4 应该具有相同的 SessionViewModel 实例。

【问题讨论】:

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


    【解决方案1】:

    好吧,viewmodel 在您的应用程序运行时存在。 好消息是:当您的活动/片段被杀死时,它不会被杀死。

    您可以从不同的片段中调用相同的视图模型。

    假设你有

    var myQuantity
    

    在您的视图模型中。

    例如,您可以从片段 A 调用视图模型并将 myQuantity 值设置为 5。 然后从fragm B你可以调用viewmodel并获取myQuantity值,你会得到5

    你找不到更多here(如何调用视图模型,...)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多