热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

AndroidMVP模式初步理解

内容Android中应用mvp,大概是这样的,为了分担Activity和Fragment的任务,就分离出来了P和M,这两个类呢,M实现了数据获取,P作为V和M通信的中间人,至于V和P之间以及

内容

Android中应用mvp,大概是这样的,为了分担Activity和Fragment的任务,就分离出来了P和M,这两个类呢,M实现了数据获取,P作为V和M通信的中间人,至于V和P之间以及P和M之间是怎么通信的呢,是分别用了一个接口。这两天在学习MVP,理解如上,说明如下。

1.Mode 数据处理模块。独立的用来处理数据的类,或者一部分类。功能一样,都是获取数据的。

2.View 视图,这里应该是指Activity和Fragment。展示数据的页面,Activity和Fragment不再进行复杂的数据处理,只负责展示数据。

3.Presenter 数据中间类  用来处理中间数据,周旋于Mode和View之间。

其实MVP就是三个类之间通过两个接口的回调来传递数据。。。。。个人之见。

定义两个接口CallbackA, CallbackB;

public interface CallbackB{
ObserData(Object obj);//该方法用来传递Mode类获得的数据
}

public interface CallbackA{   setView(Object obj);//设置视图方法,供Activity、fragment实现}

接口有了,下边新建三个类,分别对应M、V、P;

首先应该是V,也就是我们的Activity或者Fragment,该类实现接口CallbackA, 持有Presenter实例。这时候V类就调用presenter.getData()方法来请求数据。如下:

public class V extends Activity implements CallbackA{      Presenter presenter;//持有Presenter实例,用来调用Presenter中获取数据的方法。   presenter.getData();//调用该方法来获取Data.   @override   setView(Object obj){      //该方法根据obj数据来设置视图。  }}

V大概就是这样,下面是Mode类,该类用于获得数据。跟V没直接关系。Mode类就是普通的Java类,里边会实现一些获取数据的方法,他会持有CallbackB的实例。以便于获取完数据后调用ObserData()方法。Mode类如下:

public class Mode{    CallbackB callbackB;    getData(){         //获取数据。真的获取数据。暴露出来给Presenter类调用  }    //拿到数据后,调用callbackB的方法,将数据回传到Presenter;   callbackB.ObserData(obj);}

V和Mode完事了之后,就是中间类Presenter,这个类既然是中间类(介于V和M之间),所以他需要双向通信。

所以Presenter类

        1.持有CallbackA的实例,这样用于调用setView()方法,以保证和 V 类的通信。

        2.实现CallbackB接口,用于保持和Mode类的通信,使Mode类获得的数据回传到Presenter

        3.持有Mode类的实例,用于调用Mode类中获取数据的方法。

  

public class Presenter implements CallbackB{   Mode mode;   CallbackA callbackA;     public void getData(){//getData方法,暴露出来给V调用      mode.getData();  }//CallbackB接口回调,用于接收Mode获取的数据  @override  ObserData(Object obj){      callbackA.setView(obj);//拿到数据后,调用callbackA的setView方法,将数据回传到V;  }}
以上。不知道为什么,就想写篇博客,那就就这样吧。。。。。。。。。。。。。。。。。。。。。



推荐阅读
  • Android 九宫格布局详解及实现:人人网应用示例
    本文深入探讨了人人网Android应用中独特的九宫格布局设计,解析其背后的GridView实现原理,并提供详细的代码示例。这种布局方式不仅美观大方,而且在现代Android应用中较为少见,值得开发者借鉴。 ... [详细]
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • Android 渐变圆环加载控件实现
    本文介绍了如何在 Android 中创建一个自定义的渐变圆环加载控件,该控件已在多个知名应用中使用。我们将详细探讨其工作原理和实现方法。 ... [详细]
  • Android LED 数字字体的应用与实现
    本文介绍了一种适用于 Android 应用的 LED 数字字体(digital font),并详细描述了其在 UI 设计中的应用场景及其实现方法。这种字体常用于视频、广告倒计时等场景,能够增强视觉效果。 ... [详细]
  • 本章将深入探讨移动 UI 设计的核心原则,帮助开发者构建简洁、高效且用户友好的界面。通过学习设计规则和用户体验优化技巧,您将能够创建出既美观又实用的移动应用。 ... [详细]
  • RecyclerView初步学习(一)
    RecyclerView初步学习(一)ReCyclerView提供了一种插件式的编程模式,除了提供ViewHolder缓存模式,还可以自定义动画,分割符,布局样式,相比于传统的ListVi ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 本文介绍如何通过注册表编辑器自定义和优化Windows文件右键菜单,包括删除不需要的菜单项、添加绿色版或非安装版软件以及将特定应用程序(如Sublime Text)添加到右键菜单中。 ... [详细]
  • 作为一名新手,您可能会在初次尝试使用Eclipse进行Struts开发时遇到一些挑战。本文将为您提供详细的指导和解决方案,帮助您克服常见的配置和操作难题。 ... [详细]
  • 在使用 DataGridView 时,如果在当前单元格中输入内容但光标未移开,点击保存按钮后,输入的内容可能无法保存。只有当光标离开单元格后,才能成功保存数据。本文将探讨如何通过调用 DataGridView 的内置方法解决此问题。 ... [详细]
  • 高效提取PDF页面的实用技巧
    在学习和工作中,我们经常需要与他人共享PDF格式的资料。然而,有时只需要分享部分内容,而不仅仅是整个文档。本文将介绍如何使用福昕阅读器领鲜版高效地提取PDF页面,以提高文件传输效率和查阅便捷性。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 本文介绍如何通过创建替代插入触发器,使对视图的插入操作能够正确更新相关的基本表。涉及的表包括:飞机(Aircraft)、员工(Employee)和认证(Certification)。 ... [详细]
  • MacOS上高效的SVN管理工具Cornerstone安装指南
    本文详细介绍如何在MacOS上安装和配置高效SVN管理工具Cornerstone,涵盖其主要功能和优化后的性能提升。 ... [详细]
author-avatar
快乐小天使2602926543
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有