如何在嵌套的Android片段上应用MVP?

时间:2018-06-20 04:05:42

标签: android mvp android-mvp

我正在重构一个Android组件以采用MVP架构模式。我面临的问题是我有一个片段,其中嵌套了其他片段。

1-父片段会根据某些条件隐藏/显示其中一个嵌套片段。

2-子片段将数据传递给父片段,该父片段正受到here的启发,callback mechanism between fragment and activity对其进行观察。

我有2个问题:

1-如果我认为片段是MVP的视图,那么我应该对父片段和子片段使用不同的演示者(演示者和视图之间的一对一映射),还是对两者都只使用一个演示者,为什么?

2-如果我应该使用不同的演示者,那么我应该如何处理从子片段到父片段的数据传递,因为我几乎不了解缺点。和优点。的:

  • 使用像Otto这样的EventBus框架
  • 允许演示者直接引用其他演示者
  • 通过使嵌套的视图委托从其演示者接收到的父视图调用嵌套视图,使通信在视图层中保持远离here的形式。

2 个答案:

答案 0 :(得分:2)

与大多数架构师问题一样,老实说,我认为没有正确或错误的方法。因此,请仅将此作为建议(我将如何实施)

每个 MVP 单元应包含其自己的演示者,这意味着有一个父演示者(用于父片段)和几个儿童节目主持人(每个儿童片段一个)。

子演示者都包含一个 parentPresenter 字段,该字段用作将数据/消息从传递到父母。此 parentPresenter 不是真正的 presenter 对象,而是一个仅包含所需呼叫的界面

如果您需要以其他方式(从父母孩子)传递数据/消息,则可以通过接口方法视图中:

  • parentPresenter 调用其视图
  • parentView 发现它是 childFragment
  • childFragment 调用 childPresenter
  • 上的相应接口调用

这样,整个通信都隐藏在干净的接口后面,并且还可以很好地测试。希望这对您有所帮助,让我知道...

答案 1 :(得分:1)

我在应用程序中执行的操作是在父片段和子片段之间使用回调机制在之间传递数据。 我还为每个子片段都创建了一个不同的演示者,因为如果有一天我只想使用其中一个子片段,那么我只会覆盖它的演示者方法。