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
阅读全文
3 0
- android 之mvp架构,直接上代码
- Android代码架构之MVP
- Android架构之MVP
- Android架构之MVP
- Android之MVP架构
- Android之MVP架构总结
- android之MVP架构一
- android mvp分层架构优雅写代码
- Android应用架构之Android MVP使用
- Android应用架构之MVP实现
- Android应用架构之MVP实现
- Android应用架构之MVP--->天气实例
- Android架构之MVC,MVP与MVVM
- Android架构之MVP升级版
- ANDROID应用架构之MVP实现
- ANDROID应用架构之MVP实现
- 浅谈Android架构之MVP,MVVM
- Android开发之MVP架构详解
- vue实现自动切换tab
- C++之用std::nothrow分配内存失败不抛异常
- Python 字典(Dictionary)
- python与C, C++,C#一个计算精度的区别
- java 的序列化和反序列化
- android 之mvp架构,直接上代码
- Python 字典(Dictionary) get()方法
- ICBC银行管理系统实战(1)
- Android内存溢出与优化(四)——防止Handler导致的内存泄露
- mysql高级语法
- 文章标题
- 【异步请求相关知识点】XMLHTTP.readyState的五种状态
- 原子变量 和cas 原理
- 数据表自增ID,在删除全部行后插入新行ID如何再从1开始