国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android用MVP實現一個簡單的類淘寶訂單頁面的示例

2019-10-22 18:23:42
字體:
來源:轉載
供稿:網友

MVP(Model-View-Presenter) 是總所周知MVC模式的一個演變,他們的主要目的都是劃分模塊職責,降低模塊耦合,易測試,提高代碼復用,網上有很多相關的知識,這里僅是個人看法。

1、層級

Model:負責數據相關的操作

View:負責UI的繪制和用戶的交互

Presenter:作為Model和View的中間協調部分,負責兩者之間的業務邏輯處理

2、MVP的優缺點

優點:降低耦合,層級職責更明顯,易于單元測試

缺點:造成類數量增多,在某些場景下presenter的復用會產生接口冗余

這幾天把以前項目上做過的一個類似淘寶訂單的頁面單獨提取出來重新做了一遍,把一些公共代碼提取出來,方便以后用到類似界面簡易集成,同時也用到了MVP框架,通過MVP之間各層次互相綁定的最基礎的類,將數據和邏輯分離開,這是效果圖

Android,仿淘寶訂單頁面,淘寶訂單頁面

值得一提的是,這里用到了一些其他開源代碼,比如刷新樣式swipetoloadlayout等,具體的使用方法大家可以百度搜下名字就行了,資料很多。

4個Fragment用的統一的靜態構建方法,配合ViewPager和TabLayout進行一次性集成

//統一的Fragment構建方法  public static MerchandiseListBaseFragment newInstance(int flag) {    Bundle args = new Bundle();    //type代表頁簽,0:全部訂單 1:待發貨 2:待收貨 3:已完成    args.putString("type", String.valueOf(flag));    MerchandiseListBaseFragment fragment = new MerchandiseListBaseFragment();    fragment.setArguments(args);    return fragment;  }
  /**   * 初始化ViewPager   */  private void initViewPager() {    final ArrayList<Fragment> fragmentList = new ArrayList<>();    MerchandiseListBaseFragment merchandiseListAll = MerchandiseListBaseFragment.        newInstance(0);    MerchandiseListBaseFragment merchandiseListDisPatch = MerchandiseListBaseFragment.        newInstance(1);    MerchandiseListBaseFragment merchandiseListReceive = MerchandiseListBaseFragment.        newInstance(2);    MerchandiseListBaseFragment merchandiseListFinish = MerchandiseListBaseFragment.        newInstance(3);    MerchandiseListBaseFragment.firstGetData();//初始化數據    //持有fragment對象List    fragmentList.add(merchandiseListAll);    fragmentList.add(merchandiseListDisPatch);    fragmentList.add(merchandiseListReceive);    fragmentList.add(merchandiseListFinish);    FragmentPagerAdapter fragmentAdapter = new BaseFragmentAdapter(getSupportFragmentManager(), fragmentList, mTitles);    viewPager.setAdapter(fragmentAdapter);    viewPager.setCurrentItem(0);    viewPager.setOffscreenPageLimit(4);    viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {      @Override      public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {      }      @Override      public void onPageSelected(int position) {        tabLayout.getTabAt(position).select();      }      @Override      public void onPageScrollStateChanged(int state) {      }    });    tabLayout.setupWithViewPager(viewPager);//將tabLayout和ViewPager綁定    tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {      @Override      public void onTabSelected(TabLayout.Tab tab) {        viewPager.setCurrentItem(tab.getPosition());      }      @Override      public void onTabUnselected(TabLayout.Tab tab) {      }      @Override      public void onTabReselected(TabLayout.Tab tab) {      }    });  }

訂單列表是通過RecyclerView和swipetoloadlayout結合寫的,具體代碼參見源碼(本文底部),因為這里只是提供一個淘寶訂單頁面的制作方法,所以這里的所有bean數據都暫時用的本地數據,沒有添加網絡框架進行數據加載,有興趣的同學可以研究下MVP+RxJava+Okhttp+Retrofit,非常好用。

MVP構建通過在view層和presenter層中的attachPre()方法進行對象綁定:

  /**   * MVP綁定   */  @Override  public void attachPre() {    activity = this;    // mContext = this;    mPresenter = TUtil.getT(this, ID_PRESENTER);    mModel = TUtil.getT(this, ID_MODEL);    if (mPresenter != null) {      mPresenter.mContext = this;    }    initPresenter();  }

這里的getT方法是用來得到類的模板參數的類型的,返回表示此類型實際類型參數的 Type 實例化對象。這樣就可以獲取view

 public static <T> T getT(Object o, int i) {    try {      return ((Class<T>) ((ParameterizedType) (o.getClass()          .getGenericSuperclass())).getActualTypeArguments()[i])          .newInstance();    } catch (InstantiationException e) {      e.printStackTrace();    } catch (IllegalAccessException e) {      e.printStackTrace();    } catch (ClassCastException e) {      e.printStackTrace();    }    return null;  }

源碼地址:https://github.com/WeaponZhi/MerchandiseList

以后有機會再研究下網絡框架和MVP的集成,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 崇礼县| 余庆县| 南通市| 军事| 沛县| 马尔康县| 蒙城县| 高碑店市| 定陶县| 安新县| 洪湖市| 都兰县| 鞍山市| 长春市| 红河县| 竹山县| 平阴县| 石狮市| 睢宁县| 城步| 来宾市| 南阳市| 抚宁县| 汽车| 绥棱县| 盐津县| 麻阳| 乡宁县| 原阳县| 昭觉县| 尚义县| 嘉义县| 巧家县| 武陟县| 定陶县| 通江县| 濮阳县| 修水县| 开封市| 睢宁县| 赣榆县|