我应该在两个片段之间共享我的 ViewModel 吗?

Should I share my ViewModel across two fragments?

我正在尝试遵循 Android 最佳实践并使用最新推荐的架构组件。你可以在这里看到我到目前为止的尝试:https://github.com/randroid88/TodayILearned

目前应用程序的功能非常有限。

问题是目前只有 HomeFragment 可以访问 EntryViewModel。

因此,在我当前的设计中,我通过参数包(使用来自新导航架构组件的 SafeArgs)将新条目文本从 EntryEditorFragment 传递到 HomeFragment,然后 HomeFragment 通过 EntryViewModel 创建新条目:

val safeArgs = HomeFragmentArgs.fromBundle(arguments!!)
    savePossibleNewEntry(safeArgs.entryText)

private fun savePossibleNewEntry(entryText: String) {
    entryViewModel!!.insert(EntryCreator().create(entryText))
}

这感觉不对。

如果 EntryViewModel 也可以访问 EntryEditorFragment 会不会更好?

为了实现这一点,我是否必须按照此处 on this blog 的说明将 ViewModel 的范围限定为 Activity?

这里的最佳做法是什么?

Android documentation 建议为 "a common case of master-detail fragments" 共享一个 ViewModel,所以我决定对我的案例做同样的事情。

按照建议,我将 ViewModel 的范围限定为两个片段中的 Activity:

entryViewModel = activity?.run {
        ViewModelProviders.of(this, EntryViewModelFactory(this.application, EntryRepository(this.application))).get(EntryViewModel::class.java)
    } ?: throw Exception("Invalid Activity")

这是我进行更改的提交: https://github.com/randroid88/TodayILearned/commit/e307bd3f238e68a399a2a1619438770d908a606d