【问题标题】:How to apply MVP on nested android fragments?如何在嵌套的 android 片段上应用 MVP?
【发布时间】:2018-11-29 02:32:24
【问题描述】:

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

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

2- 子片段将数据传递给父片段,父片段将其视为here,灵感来自callback mechanism between fragment and activity

我有 2 个问题:

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

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

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

【问题讨论】:

  • 我认为最好将这些嵌套片段分开,我还没有将嵌套片段视为最佳实践。将每个片段放在一个单独的文件中。

标签: android mvp android-mvp


【解决方案1】:

与大多数架构问题一样,老实说,我认为没有正确或错误的方法。所以请把这只是一个建议(我将如何实施)

每个 MVP 单元都应该包含它自己的 presenter,这意味着有一个 父 Presenter(对于 父片段)和几个子演示者(每个子片段一个)。

child presenters 都包含一个 parentPresenter 字段,作为将数据/消息从 child 传递到 的一种方式>父母。这个 parentPresenter 不是真正的 presenter 对象,而是一个仅包含所需调用的 interface

如果您需要以相反的方式传递数据/消息(从),这是通过接口方法视图中:

  • parentPresenter 调用它的view
  • parentView 发现它是 childFragment
  • childFragmentchildPresenter 上调用适当的接口调用

通过这种方式,整个通信都隐藏在干净的接口后面,并且可以很好地测试。希望这会有所帮助,如果您有任何问题,请告诉我...

【讨论】:

  • 我非常感谢: - 您在处理架构问题时的观点。 - 您非常有条理的答案,几乎没有人需要阅读两次才能获得您的观点。我同意每个观点都有不同的演示者的观点。关于第二点,你能解释一下在视图之间应用回调机制和在演示者之间应用它有什么区别吗?此外,任何支持您的答案的 android 示例都将受到高度赞赏。
  • 例如样本:Todo app-Bourbon-Mindorks
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2017-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-26
    相关资源
    最近更新 更多