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
  • 相关阅读:
    Android 开发 深入理解Handler、Looper、Messagequeue 转载
    Android 开发 Handler的基本使用
    Java 学习 注解
    Android 开发 AlarmManager 定时器
    Android 开发 框架系列 百度语音合成
    Android 开发 框架系列 Google的ORM框架 Room
    Android 开发 VectorDrawable 矢量图 (三)矢量图动画
    Android 开发 VectorDrawable 矢量图 (二)了解矢量图属性与绘制
    Android 开发 VectorDrawable 矢量图 (一)了解Android矢量图与获取矢量图
    Android 开发 知晓各种id信息 获取线程ID、activityID、内核ID
  • 原文地址:https://www.cnblogs.com/hoge66/p/10298111.html
Copyright © 2011-2022 走看看