首页 文章

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

提问于
浏览
5

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

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

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

(是的,它可以以其他方式完成,但应用程序的目的是学习在具有多个片段的单个活动上实施MVP)

感谢任何帮助!谢谢!

2 回答

  • 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)和逻辑部件所在的演示者上实现的类 .

    Now about your queries.

    which means the activity will have both presenters instances. 不,您的活动不应要求有多个演示者 . 它已经打开了片段引用(通过findfragmentby id或tag) .

    who is in charge of opening the second fragment?

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

    NOTE: 有关详细信息,请按照此git示例操作 . https://github.com/antoniolg/androidmvp

  • 0

    在研究了不同的现有MVP示例项目后,我决定遵循Google的'TODO-MVP-TABLET'git项目中的大部分概念,可在此处找到:

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

    我选择这个解决方案是因为抽象级别以及以后在不更改任何代码的情况下重用其他活动中的任何片段的能力 .

    Solution principles:

    • 每个片段都有一个由界面定义的演示者 .

    • 有一个更大的演示者实现所有较小的演示者 .

    • 较大的演示者保存对所有较小演示者的引用,并且在调用方法时,它只是将动作委派给相关的演示者 .

    • 片段被赋予'big'演示者作为他们的演示者而实际上并未意识到这种情况 .

    • 较小的演示者应该持有对视图的引用 .

    Diagram taken from Google's github page:

    solution diagram from the github project

相关问题