SmartRefreshLayout使用總結
1. 概述
基礎使用:Android智能下拉刷新框架-SmartRefreshLayout
GitHub地址:https://github.com/scwang90/SmartRefreshLayout
2. 集成步驟
2.1 在 build.gradle 中添加依賴
// 版本 23以上(必須)
compile 'com.android.support:appcompat-v7:25.3.1'
compile 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0-alpha-21'
// 沒有使用特殊Header,可以不加這行
compile 'com.scwang.smartrefresh:SmartRefreshHeader:1.1.0-alpha-21'
2.2 在XML佈局文件中添加 SmartRefreshLayout(僞代碼)
<?xml version="1.0" encoding="utf-8"?>
<com.scwang.smartrefresh.layout.SmartRefreshLayout
......">
<android.support.v7.widget.RecyclerView
...... />
</com.scwang.smartrefresh.layout.SmartRefreshLayout>
2.3 在 Activity 或者 Fragment 中添加代碼
RefreshLayout refreshLayout = (RefreshLayout)findViewById(R.id.refreshLayout);
refreshLayout.setOnRefreshListener(new OnRefreshListener() {
@Override
public void onRefresh(RefreshLayout refreshlayout) {
// 開始刷新時調用
}
});
refreshLayout.setOnLoadmoreListener(new OnLoadmoreListener() {
@Override
public void onLoadmore(RefreshLayout refreshlayout) {
// 開始加載更多一頁時調用
// 加載完畢後調用
refreshLayout.finishLoadMore();
}
});
2.4 使用指定的 Header 和 Footer (3種設置方式)
- 全局Application設置
public class App extends Application {
// static 代碼段可以防止內存泄露
static {
// 設置全局的Header構建器
SmartRefreshLayout.setDefaultRefreshHeaderCreater(new DefaultRefreshHeaderCreater() {
@Override
public RefreshHeader createRefreshHeader(Context context, RefreshLayout layout) {
layout.setPrimaryColorsId(R.color.colorPrimary, android.R.color.white);//全局設置主題顏色
return new ClassicsHeader(context).setSpinnerStyle(SpinnerStyle.Translate);//指定爲經典Header,默認是 貝塞爾雷達Header
}
});
//設置全局的Footer構建器
SmartRefreshLayout.setDefaultRefreshFooterCreater(new DefaultRefreshFooterCreater() {
@Override
public RefreshFooter createRefreshFooter(Context context, RefreshLayout layout) {
//指定爲經典Footer,默認是 BallPulseFooter
return new ClassicsFooter(context).setSpinnerStyle(SpinnerStyle.Translate);
}
});
}
}
- XML佈局文件指定
<com.scwang.smartrefresh.layout.SmartRefreshLayout
......>
<!--srlAccentColor srlPrimaryColor 將會改變 Header 和 Footer 的主題顏色-->
<!--srlEnablePreviewInEditMode 可以開啓和關閉預覽功能-->
<com.scwang.smartrefresh.layout.header.ClassicsHeader
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<TextView
....../>
<com.scwang.smartrefresh.layout.footer.ClassicsFooter
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</com.scwang.smartrefresh.layout.SmartRefreshLayout>
- 代碼指定
final RefreshLayout refreshLayout = (RefreshLayout) findViewById(R.id.smartLayout);
//設置 Header 爲 Material風格
refreshLayout.setRefreshHeader(new MaterialHeader(this).setShowBezierWave(true));
//設置 Footer 爲 球脈衝
refreshLayout.setRefreshFooter(new BallPulseFooter(this).setSpinnerStyle(SpinnerStyle.Scale));
3. SmartRefreshLayout 注意點
- SmartRefreshLayout 沒有使用到:序列化、反序列化、JNI、反射,所以並不需要添加混淆過濾代碼
- 常見問題,這個一定記得先看完一遍,避免集成過程中浪費不必要的時間
- SmartRefreshLayout自動加載更多,當數據請求完畢在調用finishLoadMore() 方法時,默認會彈出加載完成的白框,若不想彈出
// 獲取Footer引用,調用該方法即可
footer.setFinishDuration(500)
- 集成此下拉刷新控件,屬性很多很多,需要大家靜下心閱讀屬性文檔
- 自定義Header和Footer
- SmartRefreshLayout自定義上拉刷新效果,一種偷懶的做法:將ClassicFooter裏面的幾個元素通過findViewById找出來進行替換實現自定義Footer的效果
- 列表數據請求完,展示“到底了”類似文案,需要設置一個參數:
/**
* Set whether or not Footer follows the content after there is no more data.
* 設置是否在沒有更多數據之後 Footer 跟隨內容
* @param enabled 是否啓用
* @return RefreshLayout
*/
@Override
public RefreshLayout setEnableFooterFollowWhenNoMoreData(boolean enabled) {
this.mEnableFooterFollowWhenNoMoreData = enabled;
return this;
}
PS:
前面自己有寫過一篇總結第三方下拉刷新庫的文章:下拉刷新系列一:Android 框架 下拉刷新,個人感覺SmartRefreshLayout的API文檔還有待完善。