当前位置:  开发笔记 > Android > 正文

具有多个片段的活动的MVP

如何解决《具有多个片段的活动的MVP》经验,为你挑选了1个好方法。

我有一个包含两个片段的活动.

activity(MainActivity)从开放的天气api中检索数据.我已经实现MVP此,其中: Model包含所有响应对象从API
ViewActivity
Presenter包含MainPresenter,MainPresenterImpl,MainView,GetDataInteractorGetDataInteractorImpl.

因此,活动从Web服务获取数据.两个片段都将显示活动中检索到的数据中的数据.

在这种情况下使用MVP的最佳做法是什么?我知道如何通过接口/回调在片段< - >活动之间传递数据,我的问题是在实现MVP时这种行为会改变吗?



1> fernandospr..:

活动/片段应该被视为MVP模型中的视图.这意味着他们应该只显示数据并接收用户交互.可以通过接口/回调来传递活动和片段.

但是,调用API服务不是活动/片段的责任.

演示者应负责调用api服务.

因此,演示者应该公开一种类似的方法loadXXX,在内部它会调用服务.收到响应后,演示者应调用view.showXXX服务结果.activity/fragment应调用此loadXXX方法并实现showXXX.

通常,会在活动/片段中创建或注入演示者.活动/片段必须实现由演示者公开的接口,并且演示者持有该接口的弱引用,以便它可以回调.

当用户与屏幕交互时,例如,onClick在按钮上,活动/片段调用演示者中的相应方法,例如presenter.loadUserDetails(),演示者告诉视图显示为加载,例如view.showAsLoading()因为它必须做它的东西:可能验证某事物或从api服务加载数据,最后回调结果到视图,例如view.showUserDetails(userDetails).

总结一下MVP各部分代码中的一个例子:

Activity/Fragment仅代表MVP的视图:

public class MyActivity extends AppCompatActivity implements MyPresenter.View {
    private MyPresenter mPresenter;

    public onCreate() {
        ...
        mPresenter = new MyPresenter(this); // Or inject it and then set the view.
    }

    public void onClick(View v) {
        mPresenter.loadXXX(param1, param2);
    }

    // MyPresenter.View methods

    public void showAsLoading() {
        ...
    }

    public void showUserDetails(UserDetails userDetails) {
        ...
    }
}

模型:

public class UserDetails {
    ...
}

主持人:

public class MyPresenter {

    private WeakReference mWeakView;

    public MyPresenter(MyPresenter.View view) {
        mWeakView = new WeakReference(view);
    }

    public void loadXXX(String param1, String param2) {
        MyPresenter.View view = mWeakView.get();
        if (view != null) {
            view.showAsLoading();
            // Do stuff, e.g. make the Api call and finally call view.showUserDetails(userDetails);
        }
    }

    interface View {
        void showAsLoading();
        void showUserDetails(UserDetails userDetails);
    }

}


@ShobhitPuri是的,绝对的.UI相关的所有内容都必须在View层中完成:活动和片段.根据经验,您不应该在演示者中进行任何Android导入.
推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有