让我先说一下,这更像是一个“结构性”问题,我并没有要求任何人编写代码;我只是想弄清楚我应该如何构建我的应用程序。
我在用Android的
DrawerLayout
/
NavigationView
对于我的应用程序。这意味着
MainActivity
是我所有片段的宿主。
我目前有三个片段(实际上要多得多,但它们或多或少都与这三个片段完全相同,只是针对不同的数据集)。
-
列表片段
-
DetailFragment
-
EditFragment(用于添加和编辑)
在我的
ListFragment
我有(惊喜!)项目列表。这是一个
LiveData
上的集合
SharedViewModel
(与
主要活动
的生命周期)。点击项目时,我将事件传递给
主要活动
通过接口侦听器。
主要活动
然后加载
DetailFragment
. 在同一调用中,我加载
SharedViewModel
(再次绑定到
主要活动
). 我设置
SharedViewModel.selectedItem
为抽头项目。然后,在
DetailFragment
的
onCreate
函数,我通过
ViewModelProviders.of(activity).get(SharedViewModel::class.java).selectedItem
.
上
DetailFragment
,有一个编辑按钮。这或多或少会经历上述相同的例程,但加载
EditFragment
相反保存编辑/添加的项目时,我在中添加/替换该项目
SharedViewModel
的集合通过
主要活动
的接口侦听器。
显然,这不是最佳的,原因有几个。首先,这意味着我至少有五大组数据
主要活动
的生命周期(本质上是应用程序的整个生命周期)。而且
主要活动
随着我不得不添加越来越多的函数来处理事件,这种增长变得难以控制。
什么是我
希望
例如,要做的是在
ListFragmentViewModel
这与
列表片段
的生命周期
. 我在上选择的项目
DetailFragmentViewModel
,我的编辑项目位于
EditFragmentViewModel
等
我的问题是,在这种情况下,我不确定如何正确地传递数据。例如,假设我在
编辑片段
. 我该怎么做
ListFragmentViewModel
的项目集合?
列表片段
位于后堆栈中,因此其viewmodel挂起,在导航回时不会重新加载数据,因为它仍然具有以前的集合。这很有道理,可能就是
应该
be(毕竟,谁想在转到时等待加载所有数据
DetailFragment
然后返回到
列表片段
?), 但这意味着我没有收到我的新产品。
这只是一个例子,但我遇到了很多类似的问题(例如,将所选项目传递给
DetailFragmentViewModel
.)
我甚至不太确定我应该往哪个方向走。有经验的人能帮我吗?