在具有两个(或多个)碎片的单个活动上实施MVP
我正在开发一个显示列表的小应用程序,当单击某个项目时,它将打开一个包含项目详细信息的辅助屏幕。我想实现MVP作为我的这个应用程序的架构,我一直在努力找出如何做到这一点,当我有单个活动与2个片段。在具有两个(或多个)碎片的单个活动上实施MVP
我的想法是每个片段有一个演示者,这意味着活动将有两个演示者实例,因为活动需要实例化它们(至少从我看过的这个链接的例子项目https://github.com/googlesamples/android-architecture)...
然后出现了一些问题,当点击列表中的某个项目时,回调被发送给第一个演示者,但此时谁负责打开第二个片段?主持人互相交谈吗?我应该通过这项活动来完成吗?有点丢失..
一直在四处寻找单个活动的例子与多个片段实施MVP,但找不到像这样的东西。
(是的,它可以以其他方式完成,但应用程序的目的是学习与多个片段在一个活动中实现MVP)
感谢任何帮助! 谢谢!
有可能有很多方法来实现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();
}
现在,这些都需要在您的逻辑部分驻留在您的视图类(活动/片段)和主持人来执行类。
现在关于您的查询。
这意味着活动将有两个演示者实例。 不,你的活动不应该要求有多个主持人。它已经打开片段引用(由findfragmentby id或tag)。
谁负责打开第二个片段?
你可以从任何一个Activity/fragment中打开它。 如果活动使用getfragmentsupportManager 如果片段使用getfragmentManager
注:欲了解更多信息按照这个混帐例子。 https://github.com/antoniolg/androidmvp
感谢您的回答,大部分的MVP介绍我已经知道了(关于接口等)..你有一个git的例子,但我看不到任何链接..也许你忘了添加它? ,关于不应该有多个演示者的活动....好吧,如果每个片段都有一个演示者,并且活动就是实例化他们的活动(在几个项目中可以看到这一点) ,该活动将不会有多个演示者? –
活动是实例化片段的人,例如,如果您有登录片段作为您的第一个片段,活动将实例化它。所有登录工作流程都将由您的片段视图,模式和演示者处理。 当成功登录第一个片段时会打开另一个片段。 与此同时,你有两个片段的公共变量,你可以把它放在活动上,这样两个片段都可以访问它。 ((MainActivity)getActivity())。commonVariable –