使用两个(或多个)片段在单个活动上实现MVP

时间:2017-09-26 16:48:35

标签: android android-fragments android-mvp android-architecture

我正在开发一个显示列表的小应用程序,当点击某个项目时,它会打开一个包含项目详细信息的辅助屏幕。我想将MVP作为我的应用程序的架构实现,当我一个包含2个片段的活动时,我一直在努力弄清楚如何做到这一点。

有些问题出现了,当点击列表中的某个项目时,会向第一个演示者发送回调,但此时,谁负责打开第二个片段?让主持人“互相交谈”?我应该通过这项活动来做吗?

一直在寻找有多个片段实现MVP的单个活动的例子,但还找不到类似的东西。

(是的,可以这样做,但应用程序的目的是学习在多个片段的单个活动上实施MVP)

感谢任何帮助! 谢谢!

2 个答案:

答案 0 :(得分:0)

实施MVP的方法可能很多。主要是我们使用3件事。 - 查看 - 主持人 - 模态

在创建这些内容之前,您应该清楚自己的屏幕工作。

例如,如果您想要登录屏幕。 首先创建活动的结构(使用接口)。就像您的演示者和视图将包含的内容一样 例如

public interface LoginPresenter {
    void validateCredentials(String username, String password);
    void onDestroy();
}

查看结构:

public interface LoginView {
void showProgress();

void hideProgress();

void setUsernameError();

void setPasswordError();

void navigateToHome();
}

现在,这些是您需要在视图类(Activity / fragment)和逻辑部分所在的演示者上实现的类。

现在关于您的疑问。

表示该活动将包含两个演示者实例。 不,您的活动不应要求有多个演示者。它已经打开了片段引用(通过findfragmentby id或tag)。

谁负责打开第二个片段?

你可以从任何一个Activity / fragment打开它。 如果Activity使用getfragmentsupportManager 如果片段使用getfragmentManager

注意: 有关详细信息,请参阅此git示例。 https://github.com/antoniolg/androidmvp

答案 1 :(得分:0)

研究了不同的现有MVP示例项目之后,我决定遵循Google在“ TODO-MVP-TABLET” git项目中的大多数概念,可以在这里找到:

https://github.com/googlesamples/android-architecture/tree/dev-todo-mvp-tablet

我之所以选择此解决方案,是因为其抽象水平以及以后可以在不更改任何代码的情况下在其他活动中重用任何片段的能力。

解决方案原则:

  • 每个片段都有一个由接口定义的演示者。
  • 有一个较大的演示者实施所有较小的演示者。
  • 较大的演示者拥有对所有较小的演示者的引用,并且在调用方法时,它只是将操作委派给相关的演示者。
  • 片段被赋予“大”演示者作为演示者,而实际上并没有意识到这种情况。
  • 较小的演示者应保留对该视图的引用。

图取自Google的github页面:

solution diagram from the github project


更新: 链接无效,似乎Google从其样本中删除了该项目。如果他们重新上传,将保留它。