MVP模式实例
来源:互联网 发布:数控编程招聘的视频 编辑:程序博客网 时间:2024/05/17 13:11
MVP核心思想:mvp把视图层中UI逻辑抽象成View接口 把业务逻辑抽象成Presenter Model还是原来的Model。
实例使用弱引用来防止内存泄漏。
Model类
public class GirlModelImlV1 implements IGirlModel { Handler handler=new Handler(Looper.getMainLooper()); @Override public void loadGirl(final GirlOnLoadlitener girlOnLoadlitener) { new Thread() { @Override public void run() { try { sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } final List<Girl> data = new ArrayList<Girl>(); data.add(); handler.post(new Runnable() { @Override public void run() { //回调 girlOnLoadlitener.onComplete(data); } }); } }.start(); }}
/** * 监听数据返回 */public interface IGirlModel { void loadGirl(GirlOnLoadlitener girlOnLoadlitener); interface GirlOnLoadlitener { void onComplete(List<Girl> girls); }}
Present类
/** * T 对应着Activity 的UI抽象接口 视图 */public abstract class BasePersenter<T> { /** * 持有UI接口的弱引用 */ protected WeakReference<T> mViewRef; /** * 获取数据方法 */ public abstract void fectch(); public void attachView(T view) { mViewRef = new WeakReference<T>(view); } /** * 解绑 */ public void detach() { if(mViewRef!=null) { mViewRef.clear(); mViewRef=null; } }}
public class GirlPresentV1<T> extends BasePersenter<IGrilView> { /** * 持有视图层 UI接口的引用 此时的视图层Activity */ IGrilView mGrilView; public GirlPresentV1(IGrilView mGrilView) { this.mGrilView = mGrilView; } /** * 持有模型Model的引用 */ IGirlModel girlModel=new GirlModelImlV1(); @Override public void fectch() { mGrilView.showLoading(); if(girlModel!=null) { /** * 参数为数据回调监听 */ girlModel.loadGirl(new IGirlModel.GirlOnLoadlitener() { @Override public void onComplete(List<Girl> girls) { //回调视图层 mGrilView.showGrils(girls); } }); } }}
View类
public interface IGrilView { /** * UI业务逻辑 加载进度条 */ void showLoading(); void showGrils(List<Girl> grils);}
/** * V IGrilView接口 */public abstract class BaseActivty<V,T extends BasePersenter<V>> extends Activity { protected T mPresent; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mPresent=createPresent(); mPresent.attachView((V) this); } @Override protected void onDestroy() { mPresent.detach(); super.onDestroy(); } /** * 子类实现具体的构建过程 * @return */ protected abstract T createPresent() ;}
/** * 属于视图层 * View */public class MainActivity extends BaseActivty<IGrilView,GirlPresentV1<IGrilView>> implements IGrilView{ private ListView listView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main_v1); listView= (ListView) findViewById(R.id.listview); mPresent.fectch(); } @Override public void showLoading() { Toast.makeText(this,"正在拼命加载",Toast.LENGTH_SHORT).show(); } @Override public void showGrils(List<Girl> grils) { listView.setAdapter(new GirlListAdapter(this,grils)); } @Override protected GirlPresentV1<IGrilView> createPresent() { return new GirlPresentV1<>(this); }}
阅读全文
0 0
- MVP 模式实例解析
- MVP 模式实例解析
- MVP模式实例解释
- MVP 模式实例解析
- MVP 模式-计算器实例
- MVP模式&简单实例
- MVP模式实例
- MVP模式实例讲解
- [转]MVP 模式实例解析
- Android架构:MVP模式实例
- Android MVP开发模式实例
- android MVP开发模式实例
- Android MVP 模式应用实例
- MVP模式实例:登录界面
- Android中MVP设计模式实例
- MVP模式在Android中的应用实例
- Android进阶 MVP设计模式实例
- Android 中的 MVP 模式(带实例)
- chap2 变量和基本类型
- MapReduce1的工作原理
- 安装并开启MongoDB数据库服务
- 物联网之边缘计算
- 云数据库 Memcache 版使用教程
- MVP模式实例
- 阻止冒泡事件的三种方法总结
- Kubernetes 新概念 “Initializers”解析(上):能让你为集群编写插件的新模型
- gcd 多线程
- Centos 6.5下搭建redis集群教程
- Red Hat Enteprise 7 安装mysql-5.7.19
- Spring MVC 文件上传
- Electron RendererProcess 获取 HTML 元素失败
- python T检验