Android MVP 架构一 View与Presenter

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

        });
    }

  

原文地址:https://www.cnblogs.com/hoge66/p/10298111.html

时间: 2024-10-30 06:03:52

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

Android MVP架构分析

App架构在Android开发者中一直是讨论比较多的一个话题,目前讨论较多的有MVP.MVVM.Clean这三种.google官方对于架构的态度一直是非常开放的,让开发者自主选择组织和架构app的方式,期望能留给开发者更多的灵活性. 由于没有一套权威的架构实现,现在很多App项目中在架构方面都有或多或少的问题.第一种常见问题是没有架构,需求中的一个页面对应项目中的一个activity或一个fragment,所有的界面响应代码.业务逻辑代码.数据请求代码等等都集中在其中.第二种常见的问题是架构实现

Android开发中的MVP架构(转)

写在前面,本博客来源于公众号文章:http://mp.weixin.qq.com/s?__biz=MzA3MDMyMjkzNg==&mid=402435540&idx=1&sn=1cd10bd9efaac7083575367a8b4af52f&scene=1&srcid=0910ARzPpBvVYPI1NDBZnixa#wechat_redirect 最近越来越多的人开始谈论架构.我周围的同事和工程师也是如此.尽管我还不是特别深入理解MVP和DDD,但是我们的新项目

Android MVPR 架构模式-Part1

Android MVPR 架构模式-Part1 原文链接 : MVPR: A FLEXIBLE, TESTABLE ARCHITECTURE FOR ANDROID (PT. 1) 原文作者 :Matthew Dupree 译文出自 : 开发技术前线 www.devtf.cn 译者 : chaossss 校对者: Mr.Simple 状态 : 完成 全面的单元测试能提高内部系统的代码质量,因为系统的每一个组件都需要被测试,因此每个单元都需要在系统外被构建,在测试环境中进行测试.对对象进行单元测试

Android MVPR 架构模式

最近我在尝试让 Google 的 IO App 变得可单元测试,我这样做的其中一个原因是验证 Freeman 和 Pryce 在引用中对单元测试的总结.即使现在我还是没有把 IOSched 中的任何一个 Activity 重构,但我已经在重构代码的过程中感受到他们所说的东西了. 我现在在重构的 Activity 是 SessionDetailActivity,如果你一直有在关注我的话就会知道我说的是哪个 Activity,但如果你只是第一次看我的博文,你可以看看下面这张图了解下 SessionD

如何更高效的使用MVP以及官方MVP架构解析

转载请标明出处: http://blog.csdn.net/dantestones/article/details/51445208 Android mvp 架构的自述中我简单的介绍了mvp,以及怎么写mvp.我自己也将mvp运用到了项目中,其实mvp并没有固定的写法,正确的去理解架构的思想,都可以有自己独特的mvp写法.git上也有很多例子,比如google的android-architecture,simple哥的Android 源码设计模式解析与实战中也有mvp的讨论.这里参考了simpl

Android中的MVP架构

Android应用的MVC架构,Activity往往充当了View和Control双重角色,造成代码耦合性较强.怎样将View和Control解耦呢,可以使用MVP架构(Model.Control.Prestener)将Activity的View和Control彻底分离,不说废话了直接上代码吧! github: https://github.com/Allin1579/Allin-android 以Activity为例,Fragment的原理相同: View:我们将Activity看作一个单纯的

Android之MVP架构

MVP(Model View Presenter)模式是由MVC模式发展而来的,在如今的Android程序开发中显得越来越重要.本篇文章简单讨论了MVP模式的思想. 啥是MVP MVP模式的主要思想是将程序的业务逻辑从表现层分离出来,理想情况下,MVP模式可以使得相同的逻辑拥有完全不同且可互换的views. 为啥要用MVP 在Android实际开发过程中,我们会遇到这样的问题:Android中的activity与界面展示和数据访问机制耦合度非常高,既负责页面组件的展示,又负责处理业务逻辑.一个极

Android中的MVP架构初探

说来惭愧,MVP的架构模式已经在Android领域出现一两年了,但是到今天自己才开始Android领域中的MVP架构征程.闲话不多说,开始吧! 一.架构演变概述 我记得我找第一份工作时,面试官问我"android是否属于MVC架构模式,简述一下".确实,Android的整体设计结构就是MVC的设计模式,在J2EE的开发中,使用的也是MVC模式,MVC模式是一个经典,经历了几十年的考验.Android项目中的MVC架构: View:是应用程序中处理数据显示的部分,对应于layout文件下

android MVP——mvp架构的应用和优化

MVP架构在android还是很好用的.我也在试着将mvp用在项目中. 下面我就来说说mvp模式的应用和优化. mvp模式的概念 MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负责显示. 比较 mvc: 1,在MVC里,View是可以直接访问Model的,View里会包含Model信息,不可避免的还要包括一些业务逻辑. 2,Model不依赖于View,但是View是依赖于Model. 3,有一