Android MVP 架构一 View与Presenter

摘要:
视图:主要负责界面和数据无关逻辑的显示,如设置控件的点击事件。演示者:主要负责视图和模型之间的交互。模型:数据部分------MVP的核心是视图层不包含对模型层对象的任何引用。当然,参数和临时变量中可能有模型层的对象。仅保留Presenter层的对象引用,以及需要更新或操作的任何数据,两者都使用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();
                }
            }
        });
    }

  Android MVP 架构一 View与Presenter第1张

Android MVP 架构一 View与Presenter第2张

Android MVP 架构一 View与Presenter第3张

其实在他上面有个入口:

 @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》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇使用jest进行单元测试.net/c#常用框架/中间件简介下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

编译Xposed

Xposed是Android平台上的有名的Hook工具,用它可以修改函数参数,函数返回值和类字段值等等,也可以用它来进行调试。Xposed有几个部分组成: 修改过的android_art,这个项目修改部分art代码,使Hook成为可能 Xposed native部分,该部分主要提供给XposedBridge可调用api和调用修改过的android_art...

《ArcGIS Runtime SDK for Android开发笔记》

开发笔记之基础教程 ArcGIS Runtime SDK for Android 各版本下载地址 《ArcGIS Runtime SDK for Android开发笔记》——(1)、Android Studio下载与安装 《ArcGIS Runtime SDK for Android开发笔记》——(2)、Android Studio基本配置与使用 《Arc...

Android 操作系统的内存回收机制

Android 是一款基于 Linux 内核,面向移动终端的操作系统。为适应其作为移动平台操作系统的特殊需要,谷歌对其做了特别的设计与优化,使应用程序关闭但不退出,并由操作系统进行进程 的回收管理。本文在 Application Framework 与 Linux 内核两个层次上,以进程为粒度,对 Android 操作系统的进程资源回收机制进行了剖析。读者...

安卓开发之activity详解(sumzom)

    app中,一个activity通常是指的一个单独的屏幕,相当于网站里面的一个网页,它是对用户可见的,它上面可以显示一些控件,并且可以监听处理用户的时间做出响应。        那么activity之间如何进行通信呢?他们是通过intent进行通信以及切换。Intent有两个重要部分(动作传递,数据传递); Ø神马是Activity?     act...

Android 系统属性-SystemProperties详解***

  创建与修改android属性用Systemproperties.set(name, value),获取android属性用Systemproperties.get(name),需要注意的是android属性的名称是有一定的格式要求的:   如下:1.前缀必须用systemcoreinitproperty_service.c中定义的前缀。 2. 进行系...

第一章Android系统移植与驱动开发概述

第一章 首先了解到Android系统一直与驱动开发的关系;它是在为特定设备Android的移植过程中,需要linux驱动程序来支持各种硬件设备的(Android是基于linux内核的),因此,学习移植必需要学习驱动,有了这样一个大体框架后,接下来往更深层次学习。 1.1 Android系统架构 总共分为4层:第一层linux内核;主要包括linux驱动程序...