如何在多个片段之间共享ViewModel

时间:2020-04-18 05:30:50

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

这是我的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")
        }
    }
}

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

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

然后, 片段1和片段2应该具有SessionViewModel的相同实例。 片段3和片段4应该具有相同的SessionViewModel实例。

1 个答案:

答案 0 :(得分:0)

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

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

假设您有

var myQuantity

在您的视图模型内部。

例如,您可以从片段A中调用viewmodel并将myQuantity值设置为5。 然后从片段B中调用viewmodel并获取myQuantity值,将得到5

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