Android MVP 架构一 View与Presenter

时间:2022-08-08 23:55:13

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();
}
}
});
}

  Android MVP 架构一 View与Presenter

Android MVP 架构一 View与Presenter

Android MVP 架构一 View与Presenter

其实在他上面有个入口:

 @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. &lbrack;Android&rsqb; 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架构&lpar;最后链接资源不错&rpar;

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

  5. 转&colon; 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. LightOj1007 - Mathematically Hard(欧拉函数)

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1007 题意:给你两个数a和b,求他们之间所有数的欧拉值得平方和; a and b (2 ...

  2. C&plus;&plus;统计代码注释行数 &amp&semi; 有效代码行数 &amp&semi; 代码注释公共行 &amp&semi; 函数个数

    问题来源,在14年的暑假的一次小项目当中遇到了一个这样的问题,要求统计C++代码的注释行数,有效代码行数,代码注释公共行数,以及函数个数. 下面稍微解释一下问题, 1)注释行数:指有注释的行,包括有代 ...

  3. Android之来历

    Android一词的本义指“机器人”,同时也是谷歌于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统.中间件.用户界面和应用 软件组成,号称是首个为移动终端打造的 ...

  4. touch修改文件的修改时间和访问时间&comma;ls --full-time显示文件详细,stat命令

    1. 同时修改文件的修改时间和访问时间 touch -d "2010-05-31 08:10:30" test.doc 2. 只修改文件的修改时间 touch -m -d &quo ...

  5. Zabbix监控系统功能及基本使用

    一.Zabbix基本介绍:    zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案.它能监视各种网络参数,保证服务器系统的安全运营:并提供柔软的通知机制以让系 ...

  6. MyBatis源码解读(2)——MapperProxy

    SqlSession可以说是整个MyBatis的重中之重,在SqlSession中涉及到前一篇四大对象:Executor.StatementHandler.ParameterHandler.Resul ...

  7. 关于chrome浏览器的帐号密码和背景色的填充问题

    不知道大家平时做项目的时候有木有关注这个问题,其实之前做项目遇到过类似的问题,但是因为是单独的chrome浏览器的填充,而且是样式问题稍微严重点,也就没在意.然而在近期的项目中有遇到了这个问题,最为一 ...

  8. jQuery事件学习

    1.JS事件的基本知识 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...

  9. 社交类APP原型模板分享——QQ

    QQ是一款社交类的APP应用——聊天软件,支持多人群聊以及丰富有趣的娱乐功能. 此模板交互效果很丰富,主要有抽屉侧拉效果,滚动内容界面.标签组切换.选择组件触发按钮状态变化.点击下拉展开列表.点击弹出 ...

  10. phpMyAdmin-Error&colon;The mbstring extension is missing&period; Please check your PHP configuration&period;

    1.打开php.ini 2.找到 ; extension_dir = "./",把前面的分号去掉.引号里改成extension_dir = "D:php/ext&quot ...