前言:因为公司氛围没有用,一直很火的mvp模式像鬼一样听说过没见过,今天闲来无事了解一下,发现由普通的MVC改起来还是挺行云流水的,但像有些弹窗不知道写在P层还是V层
关于MVP的概念我就不详细说了,记住关键的一点就是将view与逻辑分离
在谷歌推荐写法下,M层被弱化,数据处理放在了P层

1.定义一个P接口

public interface BasePresenter {boolean something();
}

2.定义一个V接口

public interface BaseView<P extends BasePresenter> {void setPresenter(P presenter);
}

3.定义一个合约类管理上述两个接口,Presenter用于定义界面的逻辑与数据,View 用于定义对应的界面显示

public class DateRecordContract {interface Presenter extends BasePresenter {//获取今日数据void getTodayData();//获取所有数据void getAllData();//检查数据是否有效void checkData();//插入一条数据void insertDateBean();//开始计时void startTiming();}interface View extends BaseView<Presenter> {//显示计时界面void startAnim();//刷新界面void refreshUI(List<DateRecordBean> data);//停止计时界面void stopAnim();//刷新一个界面void refreshOneDate(DateRecordBean bean);//保存输入的文本void saveInputtext(String str);//获得当前的文本String getCurrenttext();//隐藏输入法void hideInput();}}

4.定义一个P层实现类,最好放在上面的接口同一个包下

public class DateRecordPresenterImpl implements DateRecordContract.Presenter {private DateRecordContract.View view;private SharedPreferencesHelper spHelper;public DateRecordPresenterImpl(DateRecordContract.View view,SharedPreferencesHelper sp) {this.view = view;view.setPresenter(this);spHelper = sp;}@Overridepublic void getTodayData() {//..处理数据List<DateRecordBean> list = ...;//..通知view刷新界面view.refreshUI(list);}@Overridepublic void getAllData() {List<DateRecordBean> list = ...;//view.refreshUI(list);}@Overridepublic void checkData() {}@Overridepublic void insertDateBean() {long endTime = System.currentTimeMillis();DateRecordBean bean = new DateRecordBean();//..数据处理//处理完数据后通知view刷新界面view.refreshOneDate(bean);}@Overridepublic void startTiming() {view.hideInput();view.startAnim();spHelper.put(SharedPreferencesHelper.isStartTime, true);view.saveInputtext(str);}@Overridepublic boolean something() {//...自己的处理逻辑return isStartRecord;}
}

5.定义一个View实现类,根据回调显示UI

public class MainActivity extends AppCompatActivity implements DateRecordContract.View {
private DateRecordPresenterImpl presenter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);setSupportActionBar(toolbar);presenter = new DateRecordPresenterImpl(this,spHelper);//通知P层获得今日数据presenter.getTodayData();}@Overridepublic void refreshUI(List<DateRecordBean> data) {//显示P层处理好的数据dapter.addBeans(data);}
}

以上就是简单的MVP入门,哪里出问题了直接在合约类查看,还是挺方便,也可以把MainActivity改为Fragment实现View,有些疑问是不知道把Dialog放在哪,目前还是放在了Activity中
2018年9月5日08:02:16

MVP小白入门,只需5步相关推荐

  1. dll路径 unity3d_利用Unity3D 打包dll工具箱,只需一步~

    在本文,笔者将演示如何利用Unity打包自己的Dll工具集,入门只需一步~ 背景 网络上打包Dll的教程多如繁花,殊不知Unity定义一个AssemblyDefinition文件,dll工具集就躺在那 ...

  2. 计算机电池电源转换,图吧小白教程 篇七十七:只需一步,延长MACBOOK电池寿命(硬改电源)...

    图吧小白教程 篇七十七:只需一步,延长MACBOOK电池寿命(硬改电源) 2020-04-17 11:42:40 6点赞 24收藏 4评论 创作立场声明:看来就算到了最后这世界上也只是有IBM兼容机和 ...

  3. 如何将瀑布流里的图片加链接_只需5步!魔幻丛林瀑布后期揭秘

    去年的旅行,我跋山涉水,翻山越岭,探索了很多的幽谷密林. "海蓝时见鲸,林深处遇水"我记录下了很多瀑布的影像. 下面是一组后期处理前后的对比图 如何将原本干涩直白的画风打造出如梦游 ...

  4. 新工具上线!只需2步助你轻松学爬虫!

    作者简介:张老师,学习计算机十余年,在信息安全.生物信息学.会计.平面设计.编辑出版等多个领域也均有涉猎,热爱钻研.热爱考证.热爱生活. 你还在为Python爬虫入门发愁么? 你还在构建request ...

  5. 只需两步快速获取微信小程序源码

    第一次在掘金这样高大上的社区写文章,忐忑地敲下我获取小程序源码过程中的经验分享. 最近在学习微信小程序开发,半个月学习下来,很想实战一下踩踩坑,于是就仿写了某个小程序的前端实现,过程一言难尽,差不多两 ...

  6. 只需几步,用Python3实现属于自己的搜索引擎

    只需几步,用Python3实现属于自己的搜索引擎 打开浏览器,输入google.com,就能成功进入世界上最大的搜索引擎--谷歌搜索.不过,你是否想过,自己写一个搜索引擎呢?本篇教程,就是用来帮助你制 ...

  7. 只需两步获取任何小程序源码

    这种方法,并不能反编译出所有的小程序源码,请自知! 具体的局限请看:qwerty472123大神的md文件 https://github.com/qwerty472123/wxappUnpacker ...

  8. html写的代码投屏到LED屏,LED大屏无线投屏器,只需一步,轻松实现笔记本电脑投屏显示...

    原标题:LED大屏无线投屏器,只需一步,轻松实现笔记本电脑投屏显示 笔记本电脑不用接HDMI线,也不用接音频线,能将笔记本的画面和声音投屏在LED大屏上显示吗?当然可以,您没有看错,而且操作非常方便快 ...

  9. 只需3步,快来用AI预测你爱的球队下一场能赢吗?

    摘要:作为球迷,我们有时候希望自己拥有预测未来的能力. 本文分享自华为云社区<用 AI 预测球赛结果只需三步,看看你爱的球队下一场能赢吗?>,作者:HWCloudAI. 还记得今年夏天的欧 ...

最新文章

  1. OpenCV 4.2.0 发布,Intel 开源的计算机视觉库
  2. offsetTop,offsetHeight,scrollHeight,scrollTop的区别
  3. BZOJ5020: [THUWC 2017]在美妙的数学王国中畅游(LCT,泰勒展开,二项式定理)
  4. 单纯形法求最小值的检验数_【运筹学】单纯形法(笔记和思考)
  5. 官网mysql安装目录_官网下载MySQL 并安装
  6. JavaScript---DOM元素
  7. 【GStreamer开发】GStreamer基础教程07——多线程和Pad的有效性
  8. 深度评测阿里云、百度云、腾讯云和华为云
  9. 学习HttpClient,从两个小例子开始
  10. Eclipse 真机调试检测不到手机解决方案
  11. mac软件意外退出怎么解决_Mac 软件常见问题解决方法汇总
  12. 技术支持好跳槽吗_计算机实施、IT技术支持、技术顾问、成功客户经理岗位怎么样?...
  13. 前端系列教程之JS(自认为有用代码)
  14. obs 推流编码在哪设置_直播工具OBS推流配置操作指引
  15. excel对比两列不同
  16. 数据库字段数据(昵称)排序,规则: 数字英文字母汉字首字母 兼容简繁体排序
  17. ROS Noetic入门完整版
  18. 20190421 工作周记录-反思
  19. 字节跳动加持游戏产业-千氪
  20. ISIS的基本介绍与实验操作

热门文章

  1. 12-6路径的其他操作
  2. Copy-On-Write容器之一:CopyOnWriteArrayList
  3. 交换排序之冒泡排序(java实现)
  4. 什么是机器学习?(上)
  5. struts2中action的class属性值意义
  6. RabbitMQ环境搭建教程收集(待实践)
  7. 15.01.29-MVC中用Areas分解项目
  8. linux集群应用实战(更新完毕)
  9. iOS 横竖屏切换解决方案
  10. windows下SVN日志反馈中文乱码的解决方法