android 之mvp架构,直接上代码

来源:互联网 发布:对网络ip剧改编的看法 编辑:程序博客网 时间:2024/06/12 01:48

刚开始接触mvp结构的时候,网上一搜很多都是理论,要自己敲很是头疼,后来看了一波视屏,感觉真是柳暗花明,醍醐灌顶啊,但是视屏的感觉还是有点不大妥,后面在git看了别人的源码,自己又更改了一下,于是就有了现在这个版本。
开干

  • 这是V也就是view的总接口
public interface MvpView {    public interface ManView{        //显示dialog的方法        void showLoading();        //显示数据的方法        void showView(List<ManBean> picList);    }    public interface GirlView{        void showLoading();        void showView(List<GirlBean> picList);    }}
  • 这是M也就是model的总接口
public interface MvpModel {    public interface ManModel{        //这里加载数据        void loadView(FinishLoadListener listener);        //数据加载完后,回调这个方法        interface FinishLoadListener{            void onComplete(List<ManBean> picList);        }    }    public interface GirlModel{        void loadView(FinishLoadListener listener);        interface FinishLoadListener{            void onComplete(List<GirlBean> girlBean);        }    }}

上面是我们后面要实现的接口,每个方法都有注释,应该没什么问题,我们下面就来看看怎实现

//名字不大好取,大家别搞混了public class GirlRealizeModel implements MvpModel.GirlModel{    @Override    public void loadView(final FinishLoadListener listener) {       //这里加载网络的那些数据,加载完成之后,就调用这个加载完成的接口,将从网络加载的数据,丢进去,后面由我们mvp的p来处理,因为我这里父类的方法里写的是list数据,这里就回传list数据,大家也可以写成是类,一般json数据都是实体类存的       List<GirlBean> list=new ArrayList<>();        listener.onComplete(list);    }}

好的,下面来实现GirlView

public class GirlActivity extends Activity implements MvpView.GirlView{    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_scenery);        //new 出我们的控制器,并且调用fetch方法        new GirlPresenter(this).fetch();    }    @Override    public void showLoading() {        //加载数据之前调用,显示对话框那些啊,都在这里了    }    @Override    public void showView(List<GirlBean> picList) {        //加载的数据都来到了这里,我们可以给listview加入数据啦,那么是怎么传到这里来的呢,看下面我们mvp的控制器p    }}

写了这么多我们的p Presenter还没有出现,接下来就是他发挥控制的时候了,有了数据,我们的persenter就要控制数据怎么显示了

public class GirlPresenter {    private MvpModel.GirlModel mModel=new GirlRealizeModel();    private MvpView.GirlView mView;    //构造方法    public GirlPresenter(MvpView.GirlView view){        mView=view;    }    //这里是供activity调用的方法,这里可以看到这个persenter控制着m加载数据,控制v显示不同的数据    public void fetch(){        mView.showLoading();        mModel.loadView(new MvpModel.GirlModel.FinishLoadListener() {            @Override            public void onComplete(List<GirlBean> picList) {                mView.showView(picList);            }        });    }}

到这里我们的mvp代码就写完了,你会说在接口里还有一个man的接口啊,这里我就不写了,留个大家试试,加深印象,也许你会说为什么要写多个接口呢,一个不就行了嘛,开始我就是写了一个接口,后来发现返回的数据不是都一样的,有的是实体类,有的是list数据,于是就写了多个接口(大家有更好的方法时通知一下哈),楼主写博客的时候重感冒啊,于是就写了伪代码(这不是借口哈),不过说实话六月天感冒,真的觉得好丢人啊,大家也是在工作的同时还要多多注意身体,毕竟身体才是本钱。

传送门,优化了一下模式,增加对view 的绑定跟解绑
https://github.com/WoBuShuo/MVP_Mode