问题很简单。问题是在使用ViewModels、LiveData和其他相关Lifecycle感知架构方法的情况下。
我有一个带有NavDrawer的Activity,它可以在内部切换片段。
同时,我有一个情况,即两个片段同时出现在屏幕上——这将是主要的痛点。 一个Fragment有一个带有嵌套
我想问的是,不是一个修复此问题的收据或规则,也不是通过修复整个项目结构来克服此问题。我想请教如何在android.arch.lifecycle风格中应用MVVM方法来解决我的用例。
我没有看到比在片段之间共享Activity ViewModel更复杂的东西。但是,这并不是治愈方法。
你能看到的是一团乱麻。问题在于所有人都共享ActivityViewModel。FirstFragment中的ViewPager连接(聚合)意味着在FirstFragment内部初始化ChildFragments,它们也使用相同的ActivityViewModel(救救我)。因此,每个人都在使用一个共享的ViewModel。
我的建议是为每个层添加一个ViewModel。这样,Activity / Fragment / ChildFragments就有了自己的ViewModel。 但是,这里出现了一个问题 - 那我们该如何进行通信呢?
可能的解决方案:
我有一个带有NavDrawer的Activity,它可以在内部切换片段。
同时,我有一个情况,即两个片段同时出现在屏幕上——这将是主要的痛点。 一个Fragment有一个带有嵌套
Fragments
(不要问为什么)的ViewPager。
另一个片段只是在用户执行某些操作时从第一个片段获取信息。这是通过共享活动视图模型实现的。但是,应用程序本身具有大量的业务逻辑,并且随着进一步的发展,视图模型变得越来越大。
我想问的是,不是一个修复此问题的收据或规则,也不是通过修复整个项目结构来克服此问题。我想请教如何在android.arch.lifecycle风格中应用MVVM方法来解决我的用例。
我没有看到比在片段之间共享Activity ViewModel更复杂的东西。但是,这并不是治愈方法。
你能看到的是一团乱麻。问题在于所有人都共享ActivityViewModel。FirstFragment中的ViewPager连接(聚合)意味着在FirstFragment内部初始化ChildFragments,它们也使用相同的ActivityViewModel(救救我)。因此,每个人都在使用一个共享的ViewModel。
我的建议是为每个层添加一个ViewModel。这样,Activity / Fragment / ChildFragments就有了自己的ViewModel。 但是,这里出现了一个问题 - 那我们该如何进行通信呢?
可能的解决方案:
- 每个组件有两个ViewModel。一个ViewModel将处理/委托业务逻辑,另一个将进行通信。每个组件有两个ViewModel - 不太好,对吧?
- 使用旧式接口(拜托别这样做!)
其他解决方法-例如DB / SharedPrefs / Realm更改侦听器和事件总线(我已经老了,做不来这个 :()。
请在此处提供您的解决方案!
我认为以上所有方法都违反了许多设计原则,那么我应该怎么办呢?
我该如何摆脱这困境?有没有Uncle Bob
或其他超级英雄
来帮忙?