zoukankan      html  css  js  c++  java
  • 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)));
                }
    
               
            });
        }
    

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

      

    www.beicaiduo.com
  • 相关阅读:
    【CANoe基础】CANoe常用操作
    ZedGraph控件横纵坐标显示中文名(转)
    Winforn中设置ZedGraph曲线图的属性、坐标轴属性、刻度属性(转)
    c# 访问sqlite资源
    混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集。
    ABP框架资源
    vue新建项目一直在downloading template转,最后超时
    vscode(实验)--ABP框架 .net core 版本的安装与运行(vue模板)(转)
    安装-打开-运行-ABP框架(asp.net core 2.X+Vue)运行前端(转)
    VSCode打开Visual Studio的ABP框架项目(转)
  • 原文地址:https://www.cnblogs.com/hoge66/p/10298111.html
Copyright © 2011-2022 走看看