View:主要负责界面的显示及跟数据无关的逻辑,比如设置控件的点击事件等 
Presenter:主要负责View与Model的交互 
Model:数据部分

-------

MVP的核心是:
View层不持有Model层对象任何引用,当然参数里面和临时变量里可以有Model层对象,只持有Presenter层对象引用,任何需要更新或者操作数据的,都间接通过Presenter对象去操作数据。而Model层想要操作View层是无法实现的,必须通过Presenter层。

Presenter层持有View层对象的引用,除此之外不持有其他的UI控件等的引用,Model层会把想要更新View的操作委托Presenter去操作,而Presenter层会把更新View操作交给View层对象去操作。

-------

1、view 层,实现:

public class GoodsActivity extends Activity implements ViewPager.OnPageChangeListener, OnPageClickListener, ShoppingMarkContentView {

  

2、ShoppingMarkContentView :

package com.wbh.mall.views.iviews;

import com.wbh.mall.restful.bean.GoodDTO;
import com.wbh.mall.restful.bean.UserDataListDTO; import java.util.List; public abstract interface ShoppingMarkContentView {
public abstract void refershRecommendItemList(List<GoodDTO> paramList); public abstract void refreshCollectSameMarkUserInfo(UserDataListDTO paramUserDataListDTO); public abstract void refreshItemDetail(GoodDTO paramGoodDTO); public abstract void setFollow(short paramShort);
}

  

3、在GoodsActivity 中实现上面的方法:

 @Override
@SuppressLint({"MissingSuperCall"})
protected void onResume() {
super.onResume();
this.markContentPresenter.start();
} @Override
public void refershRecommendItemList(List<GoodDTO> paramList) {
runOnUiThread(new Runnable() {
@Override
public void run() {
if ((paramList != null) && (!paramList.isEmpty())) {
GoodsActivity.this.recommend_good_container.setVisibility(0);
GoodsActivity.this.recommendGoodListAdapter.goodDTOS.addAll(paramList);
GoodsActivity.this.recommend_good_list_recyclerview.notifyFinish();
}
}
});
}

  

其实在他上面有个入口:

 @Override
public void onCreate(Bundle savedInstanceState) {
this.markContentPresenter.tuijianGoods(false);

  

 public void tuijianGoods(boolean b) {

        if (!b) {
this.manager.current_page = 1;
this.lastUpDate = DateUtil.getCurrentTime();
} int j = this.manager.page_num;
int i = this.manager.current_page;
long l = this.lastUpDate;
String str = this.articleId;
if (TextUtils.isEmpty(this.itemUrl) == true) { }
StringBuilder sb = new StringBuilder();
sb.append(this.num_iid);
sb.append("");
markSource.tuiJianGoods(j, i, l, str, sb.toString());
}

  在 public class ShoppingMarkContentPresenter extends Presenter {中定义上面的方法;

4、请求服务器:

public class MarkRestSource extends RestSource {

  

 public void tuiJianGoods(int paramInt1, int paramInt2, long paramLong, String paramString1, String paramString2) {
Map localMap = createPhoneInfoMap();
localMap.put("pageSize", Integer.valueOf(paramInt1));
localMap.put("pageNo", Integer.valueOf(paramInt2));
localMap.put("lastUpDate", Long.valueOf(paramLong));
if (!TextUtils.isEmpty(paramString1)) {
localMap.put("articleId", paramString1);
}
if (!TextUtils.isEmpty(paramString2)) {
localMap.put("num_iid", paramString2);
}
cleanNullParams(localMap);
this.markApi.tuiJianGoods(localMap).enqueue(new Callback() { @Override
public void onResponse(Call call, Response response) {
int i = response.code();
if (i == 200) {
MarkRestSource.this.storeToken(((MarkRestResponse.TuijianGoodsResponse) response.body()).token);
MarkRestSource.this.dataBus.post(response.body());
} else {
MarkRestSource.this.dataBus.post(new MarkRestResponse.TuijianGoodsResponse(Integer.valueOf(i)));
}
} @Override
public void onFailure(Call call, Throwable throwable) {
MarkRestSource.this.dataBus.post(new MarkRestResponse.TuijianGoodsResponse(Integer.valueOf(2000)));
} });
}

  BUS 事件传递

/**
* 订阅事件 EventBus @Subscribe
*
* @return Result<Xxxx>
*/
@Subscribe
public void tuijianGoodsResponse(MarkRestResponse.TuijianGoodsResponse paramTuijianGoodsResponse)
{
try
{
if ((paramTuijianGoodsResponse.code == 200) && (paramTuijianGoodsResponse.data != null)
&& paramTuijianGoodsResponse.data.list != null)
{
this.lastUpDate = paramTuijianGoodsResponse.data.lastUpDate;
PageManager localPageManager = this.manager;
boolean isLastPage;
if (paramTuijianGoodsResponse.data.isLastPage == 0) {
isLastPage = false;
} else {
isLastPage = true;
}
localPageManager.isLastPage = isLastPage;
this.markContentView.refershRecommendItemList(paramTuijianGoodsResponse.data.list);
if (TextUtils.isEmpty(this.itemUrl)) {
storeMarkrRecords(paramTuijianGoodsResponse.data.list);
}
}
else
{
this.markContentView.refershRecommendItemList(null);
}
}
catch (Exception ex)
{
ex.printStackTrace();
}
}

  

Android MVP 架构一 View与Presenter的更多相关文章

  1. [Android] Android MVP 架构下 最简单的 代码实现

    Android  MVP 架构下  最简单的 代码实现 首先看图: 上图是MVP,下图是MVC MVP和MVC的区别,在于以前的View层不仅要和model层交互,还要和controller层交互.而 ...

  2. Android MVP架构分析

    App架构在Android开发者中一直是讨论比较多的一个话题,目前讨论较多的有MVP.MVVM.Clean这三种.google官方对于架构的态度一直是非常开放的,让开发者自主选择组织和架构app的方式 ...

  3. Android MVP架构浅析

    Android之MVC模式 MVC好处: 从用户的角度出发,用户可以根据自己的需求,选择自己合适的浏览数据的方式.比如说,对于一篇在线文档,用户可以选择以HTML网页的方式阅读,也可以选择以pdf的方 ...

  4. 转:Android开发中的MVP架构(最后链接资源不错)

    Android开发中的MVP架构 最近越来越多的人开始谈论架构.我周围的同事和工程师也是如此.尽管我还不是特别深入理解MVP和DDD,但是我们的新项目还是决定通过MVP来构建. 这篇文章是我通过研究和 ...

  5. 转: Android开发中的MVP架构详解(附加链接比较不错)

    转: http://www.codeceo.com/article/android-mvp-artch.html 最近越来越多的人开始谈论架构.我周围的同事和工程师也是如此.尽管我还不是特别深入理解M ...

  6. 设计模式笔记之二:Android开发中的MVP架构(转)

    写在前面,本博客来源于公众号文章:http://mp.weixin.qq.com/s?__biz=MzA3MDMyMjkzNg==&mid=402435540&idx=1&sn ...

  7. Android MVPR 架构模式

    最近我在尝试让 Google 的 IO App 变得可单元测试,我这样做的其中一个原因是验证 Freeman 和 Pryce 在引用中对单元测试的总结.即使现在我还是没有把 IOSched 中的任何一 ...

  8. android 开发架构学习

    Android DataBinding(数据绑定)入门与实战 http://examplecode.cn/2018/07/20/android-databinding-01-introduction/ ...

  9. 转:Android官方MVP架构示例项目解析

    转自: http://www.infoq.com/cn/articles/android-official-mvp-architecture-sample-project-analysis 作者 吕英 ...

随机推荐

  1. 三、zookeeper安装

    一.简介 二.下载解压: #wget http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.4.12/zookeeper-3.4.12.tar ...

  2. PHP超级全局变量、魔术变量和魔术函数

    PHP超级全局变量(9个) $GLOBALS 储存全局作用域中的变量 $_SERVER 获取服务器相关信息 $_REQUEST 获取POST和GET请求的参数 $_POST 获取表单的POST请求参数 ...

  3. NPOI 上传Excel功能(二)

    3.上传文件,写入log using DC.BE.Business.SYS; using DC.BE.Entity.ERP; using DC.BE.Entity.SAS; using DC.BE.E ...

  4. Android 模块化/热修复/插件化 框架选用

    概念汇总 动态加载:在程序运行的时候,加载一些程序自身原本不存在的文件并运行这些文件里的代码逻辑.动态加载是热修复与插件化实现的基础. 热修复:修改部分代码,不用重新发包,在用户不知情的情况下,给ap ...

  5. CentOS 安装git

    git安装 yum install git 初始化git “git init --bare 文件夹” 添加所有 “git add . ” 提交 “git commit -m "提交信息&qu ...

  6. kubernetes Helm基本操作

    创建: helm install --name demo --set Persistence.Enabled=false stable/jenkins 查看: kubectl get po,svc - ...

  7. 清北澡堂 Day2 上午 一些比较重要的关于数论的知识整理

    1.算数基本定理: 对于任意的大于1的正整数N,N一定能够分解成有限个质数的乘积,即 其中P1<P2<...<Pk,a1,a2,...,ak>=1; 证: 存在性: 若存在最小 ...

  8. 学习Android过程中遇到的问题及解决方法——网络请求

    在学习Android的网络连接时遇到崩溃或异常(出现的问题就这两个,但是不稳定)的问题,先上代码,看看哪里错了(答案在文末) activity_main.xml: <?xml version=& ...

  9. 图片文字识别aip的一个小Demo

    目前接触到了一个新的内容,识别图片上的文字,以下是这个Demo 首先需要在需要在百度云-管理中心创建应用 地址:http://console.bce.baidu.com/ai/#/ai/ocr/app ...

  10. 【XSY2732】Decalcomania 可持久化线段树 分治

    题目描述 有一个陶瓷瓶周围有\(n\)个可以印花的位置.第\(i\)个与第\(i+1\)个位置之间的距离为\(d_i\),在第\(i\)个位置印图案要\(t_i\)秒. 机器刚开始在\(0\)号位置, ...