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

兰迪

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

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

  • 它具有一个Room db,用于本地存储日记帐分录。
  • 一个片段HomeFragment,列出了所有条目
  • 另一个片段EntryEditorFragment,它创建新的条目。
  • 一个ViewModel EntryViewModel,它通过存储库更新数据。

问题是只有HomeFragment现在可以访问EntryViewModel。

因此,在我目前的设计中,我通过一个参数束从EntryEditorFragment新条目文字传递给HomeFragment(使用SafeArgs从新导航建筑构件),然后HomeFragment创建通过EntryViewModel新条目:

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

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

这感觉不对。

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

为了做到这一点,我是否必须将ViewModel的范围限定在Activity上,如本博客中此处所述

这里的最佳做法是什么?

兰迪

Android文档建议共享视图模型的“主-片段的常见情况”,所以我决定把我的情况下这样做。

如建议的那样,我在两个片段中将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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

SQLAlchemy:我应该在两个查询之间提交更新吗?

我应该在两个交换机之间的直接连接上获得链接状态吗?

我应该在两个地方处理WSARecv()的错误吗?

我应该在同一个类中实现这两个接口吗?

我应该在ViewModel中包括LifecycleOwner吗?

两个WinForms之间的TreeView的Invoke方法应该在哪里处理?

需要大量计算,并且需要在耦合策略模式下的两个行为之间共享。应该在哪里完成并举行

我应该在“两个更好”的比较中使用哪种机器学习模型

我应该在这段代码中更改什么以返回两个列表?

我不确定我应该在哪两个元素之间寻找和格式化错误(jupyter + selenium)

我需要一个正则表达式来删除开头的空格,并且应该在两个单词之间留出空格

Android mvvm我应该在两个视图中使用2个ViewModels,在两个视图中使用1个ViewModel,还是在Parent活动中使用1个?

如何在两个时间序列之间执行交叉迭代?应该在python中执行哪些转换?

$ lookup在聚合猫鼬中,我们应该在foreignField中使用两个字段吗?

我应该如何在两个片段中使用ViewModel?

应该在哪里创建片段?在viewModel或Activity中?

我应该在R中使用crossprod还是基函数来计算两个向量的距离平方平方?

我可以对一个片段使用两个viewmodel吗?

Android FragmentActivity与(共享?)两个片段之间的android.widget.SearchView吗?

我应该在使用 viewModel 时添加 binding.lifecycleOwner=this 吗?

我应该在Model或viewModel中放置“必需”数据注释吗?

循环不应该在矩阵中附加一个,然后是两个,然后是三个数字吗?

我应该在类或重组程序之间传递GUI输入的变量吗?

我应该在控制器和域服务之间放置命令总线吗?

我应该在不同的SATA控制器之间分配驱动器吗?

为什么我的代码在 1 列中给我数据它应该在两个不同的列中给我

我应该在LINQ中两次使用OrderByDescending吗?

我应该在PHP中两次设置Content-Type标头吗?

我可以/应该在文件夹中组织我的30个课程吗?