下拉重新整理上拉載入控制元件+Material Design使用
人所缺乏的不是才幹而是志向,不是成功的能力而是勤勞的意志。 —— 部爾衛
Material Design控制元件使用
前幾天分享了兩篇Material Design控制元件使用的文章,這裡就不多做敘述,下面是傳送門,想要學習的小夥伴可以去看下:
juejin.im/entry/58d8d…
juejin.im/entry/58d9c…
時間:2017年4月10日15:34:44
更新:依賴庫已更新,如果想使用最新版的小夥伴做下修改
1.解決當列表資料不夠一屏的時候,底部的 footer 載入中無法隱藏;
2.新增隱藏/顯示底部footer方法(具體在下文)
3.感謝 @姓名 提出的問題!!
時間:2017年4月11日15:23:12
更新:新增頭部header隱藏/顯示方法(具體在下文)
pulltorefreshRecylerView
下拉重新整理上拉載入控制元件
描述
這是一個下拉重新整理上拉載入更多框架,頭部用的秋哥的android-Ultra-Pull-To-Refresh,底部和沒有資料的狀態自己實現的。
特點
- 可定製的頭部 (可以檢視android-Ultra-Pull-To-Refresh文件)
- 可定製的底部 (載入中/沒有資料/載入失敗 三種狀態的定製)
- 可定製的沒有資料狀態顯示 (目前只有一個狀態)
- 可定製列表智慧預載入
- 目前提供一個實現好的ItemDecoration(頭部吸附效果)
效果預覽
下拉重新整理上拉載入
頭部吸附效果
列表智慧預載入
使用方式
依賴
Step 1. 在project的build的repositories{}中新增maven { url '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
其他配置
頭部吸附效果
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整合),試了一下,很是好用啊,這裡也不做敘述,下面是效果圖和傳送門,樣式有很多想學習的小夥伴可以去看一下。
Android可伸縮佈局-FlexboxLayout(支援RecyclerView整合)
結尾
Github地址:github.com/tengyukun/p…
請大家多多關注,更多更新會首先在GitHub上體現,也會在第一時間在本平臺釋出