天天看點

下拉重新整理上拉加載控件+Material Design使用下拉重新整理上拉加載控件+Material Design使用

下拉重新整理上拉加載控件+Material Design使用

人所缺乏的不是才幹而是志向,不是成功的能力而是勤勞的意志。 —— 部爾衛

Material Design控件使用

前幾天分享了兩篇Material Design控件使用的文章,這裡就不多做叙述,下面是傳送門,想要學習的小夥伴可以去看下:

https://juejin.im/entry/58d8d4d344d90400687c134d/detail#comment

https://juejin.im/entry/58d9cdf044d9040068813c2d/detail#comment

時間:2017年4月10日15:34:44

更新:依賴庫已更新,如果想使用最新版的小夥伴做下修改

1.解決當清單資料不夠一屏的時候,底部的 footer 加載中無法隐藏;

2.添加隐藏/顯示底部footer方法(具體在下文)

下拉重新整理上拉加載控件+Material Design使用下拉重新整理上拉加載控件+Material Design使用

時間:2017年4月11日15:23:12

更新:添加頭部header隐藏/顯示方法(具體在下文)

pulltorefreshRecylerView

下拉重新整理上拉加載控件

描述

這是一個下拉重新整理上拉加載更多架構,頭部用的秋哥的android-Ultra-Pull-To-Refresh,底部和沒有資料的狀态自己實作的。

特點

  • 可定制的頭部 (可以檢視android-Ultra-Pull-To-Refresh文檔)
  • 可定制的底部 (加載中/沒有資料/加載失敗 三種狀态的定制)
  • 可定制的沒有資料狀态顯示 (目前隻有一個狀态)
  • 可定制清單智能預加載
  • 目前提供一個實作好的ItemDecoration(頭部吸附效果)

效果預覽

下拉重新整理上拉加載

下拉重新整理上拉加載控件+Material Design使用下拉重新整理上拉加載控件+Material Design使用

頭部吸附效果

下拉重新整理上拉加載控件+Material Design使用下拉重新整理上拉加載控件+Material Design使用

清單智能預加載

下拉重新整理上拉加載控件+Material Design使用下拉重新整理上拉加載控件+Material Design使用

使用方式

依賴

Step 1. 在project的build的repositories{}中添加maven { url ‘https://jitpack.io’ }

allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}
           

Step 2. 在module中添加compile ‘com.github.tengyukun:pulltorefreshRecylerView:v1.2’

dependencies {
        //compile 'com.github.tengyukun:pulltorefreshRecylerView:v1.0'
        //更新解決當清單隻有一頁資料的時候,底部的 footer 加載中無法隐藏
        //compile 'com.github.tengyukun:pulltorefreshRecylerView:v1.1'
        //添加header隐藏/顯示方法
        compile 'com.github.tengyukun:pulltorefreshRecylerView:v1.2'
}
           

配置

目前有兩個參數可以配置

  • app:emply_layout

    沒有資料時候布局

  • app:number_load_more

    最後可見條目 + number_load_more > total 觸發加載更多;預設值為4

xml中配置示例

<com.pulltorefresh.tyk.library.PtrDefRecyclerView
        android:id="@+id/prv_fragmentthree_content"
        android:layout_height="match_parent"
        android:layout_width="match_parent"
        app:emply_layout="@layout/erv_default_empty"
        app:number_load_more="5"/>
           

activity代碼配置

  • 基本設定
    prv_fragmentthree_content.setAdapter(rvAdapter = new RvAdapter());//設定adapter
    prv_fragmentthree_content.setLastUpdateTimeRelateObject(this);//傳入參數類名作為記錄重新整理時間key
    prv_fragmentthree_content.setOnRefreshListener(this);//設定重新整理監聽
    prv_fragmentthree_content.setOnLoadListener(this);//設定加載更多監聽
               
  • 隐藏/顯示空狀态界面
    prv_fragmentthree_content.hideEmptyView();
    prv_fragmentthree_content.showEmptyView();
               
  • (v1.1更新)隐藏/顯示底部footer
    prv_fragmentthree_content.hideFooterView();
    prv_fragmentthree_content.showFooterView();
               
    • (v1.2更新)隐藏/顯示底部header

      prv_fragmentthree_content.hideHeaderView();

      prv_fragmentthree_content.showHeaderView();

  • 重新整理設定
    prv_fragmentthree_content.refreshComplete();//下拉重新整理結束   
    prv_fragmentthree_content.loadComplete();//上拉加載結束
    prv_fragmentthree_content.loading();//上拉加載顯示"加載中"       
    prv_fragmentthree_content.loadFail();//上拉加載顯示"加載失敗,點選重試"
    prv_fragmentthree_content.noMore();//上拉加載顯示"暫無更多資料"
               

由于這裡使用的PtrDefRecyclerView,頭部就是預設經典樣式是以需要調用,使用其他頭部時不需要調用

prv_fragmentthree_content.setLastUpdateTimeRelateObject(this);//傳入參數類名作為記錄重新整理時間key
           

使用MaterialHeader

MaterialHeader materialHeader = new MaterialHeader(activity);
    materialHeader.setPadding(0, 40,0,40);
    prv_fragmentthree_content.setHeaderView(materialHeader);
    prv_fragmentthree_content.setPinContent(true);
           

adapter代碼配置

adapter需要實作CommonAdapter或者MultipleAdapter抽象方法

//建立ViewHolder
public abstract VH createCustomViewHolder(ViewGroup parent, int viewType);
//ViewHolder設定資料
public abstract void bindCustomViewHolder(VH holder, T t, int position);
           

目前提供了下面這些方法操作adapter資料,具體實作可以在CommonAdapter中檢視

  • 新增資料
    public void add(@NonNull T object)
    public void addAll(@NonNull Collection collection)
    public void addAll(@NonNull T… items)
    public void insert(@NonNull T object, int index)
    public void insertAll(@NonNull Collection collection, int index)
               
  • 删除資料
    public void remove(int index)
    public boolean remove(@NonNull T object)
    public void clear()
               
  • 修改資料
    public void update(@NonNull List mDatas)
               
  • 檢視資料
    public T getItem(int position)
    public int getPosition(T item)
    public List getData()
               
  • 排序
    public void sort(Comparator comparator)
               
  • 加載布局
    public View inflateView(@LayoutRes int resId, ViewGroup parent)
               

adapter中ViewHolder需要繼承BaseViewHolder

其他配置

頭部吸附效果

下拉重新整理上拉加載控件+Material Design使用下拉重新整理上拉加載控件+Material Design使用
mItemDecoration = new StickItemDecoration(context,dataList) {
          @Override
          public String getTag(int position) {
          return "吸附頭部顯示的文字";
          }
    }
  prv_fragmentthree_content.addItemDecoration(mItemDecoration);
           

這裡StickItemDecoration提供了如下方法來定制吸附效果

//設定吸附條目高度
public void setStickHeight(int mStickHeight)
//設定吸附條目背景
public void setStickBackgroundColor(int mStickBackgroundColor)
//設定吸附文字顔色
public void setStickTextColor(int mStickTextColor)
//設定吸附文字大小
public void setStickTextSize(int mStickTextSize)
//設定吸附文字leftmargin
public void setStickTextoffset(int mStickTextoffset)
           

自定義

頭部使用秋哥的android-Ultra-Pull-To-Refresh

秋哥預設已經實作了3個頭部

  • MaterialHeader
  • PtrClassicDefaultHeader
  • StoreHouseHeader

    一般情況下這些樣式應該夠了,如果有特殊需求可以自定義頭部.然後prv.setHeaderView(view);

底部的話目前我隻實作了一個PtrDefaultFooter,自定義的話需要實作PtrLoadUIHandle接口.寫法可以參考PtrDefaultFooter

public interface PtrLoadUIHandle {

    /**
     * 允許加載更多
     */
    int LOAD = 1;

    /**
     * 暫無更多資料
     */
    int NOMORE = 2;

    /**
     * 加載失敗
     */
    int LOADFAIL = 3;

    /**
     * @return 擷取底部目前狀态
     */
    int getState();

    void onLoading();//loading狀态實作

    void onNoMore();//沒有資料狀态實作

    void onLoadFail(OnLoadListener listener);//加載失敗實作


}
           

實作後調用setFooterView()方法設定

其他

FlexboxLayout使用

前幾天在掘金上看到依然飯特稀西大神寫的Android可伸縮布局-FlexboxLayout(支援RecyclerView內建),試了一下,很是好用啊,這裡也不做叙述,下面是效果圖和傳送門,樣式有很多想學習的小夥伴可以去看一下。

下拉重新整理上拉加載控件+Material Design使用下拉重新整理上拉加載控件+Material Design使用

Android可伸縮布局-FlexboxLayout(支援RecyclerView內建)

結尾

Github位址:https://github.com/tengyukun/pulltorefreshRecylerView

請大家多多關注,更多更新會首先在GitHub上展現,也會在第一時間在本平台釋出

繼續閱讀