91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-09-23 00:56:04 來源:腳本之家 閱讀:189 作者:小之丶 欄目:移動開發

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

1、層級

Model:負責數據相關的操作

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

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

2、MVP的優缺點

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

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

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

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

值得一提的是,這里用到了一些其他開源代碼,比如刷新樣式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的集成,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

灌阳县| 鄄城县| 扎囊县| 从化市| 临安市| 威信县| 深泽县| 桂林市| 玉树县| 增城市| 普格县| 岳普湖县| 潢川县| 湄潭县| 凤山市| 武安市| 土默特左旗| 当阳市| 罗定市| 吉安市| 泗洪县| 昌吉市| 凤庆县| 商河县| 奈曼旗| 惠来县| 东明县| 禄劝| 扶沟县| 壶关县| 堆龙德庆县| 大渡口区| 乐安县| 荃湾区| 梨树县| 娄底市| 凉山| 太和县| 阳江市| 珲春市| 大连市|