我正在尝试遵循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上?
这里的最佳做法是什么?
答案 0 :(得分:1)
Android documentation建议为“常见的主细节片段案例”共享一个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