1.引入依賴
- project build.gradle中引入
allprojects {
repositories {
maven { url 'https://jitpack.io' }
....
}
}
- app build.gradle中引入
//recyclerview列表布局
implementation 'androidx.recyclerview:recyclerview:1.2.0-alpha02'
//適配器
implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:3.0.3'
//下拉刷新
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0-rc01'
- 主布局
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:id="@+id/swipeLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_list"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
- 適配器
- 在3.0.2版本中開啟上拉加載與下拉刷新 需要實(shí)現(xiàn)LoadMoreModule接口
public class MyAdapter extends BaseQuickAdapter<User, BaseViewHolder> implements LoadMoreModule
{
/**
* 構(gòu)造方法肝陪,在實(shí)例化Adapter時(shí)就傳入了一個(gè)List徙垫。
* 如果后期設(shè)置數(shù)據(jù)缓窜,剛開始不需要傳入初始List甫煞,直接調(diào)用 super(layoutResId); 即可
*/
public MyAdapter(int layoutResId, List<User> data) {
super(layoutResId, data);
}
/**
* 在此方法中設(shè)置item數(shù)據(jù)
*/
@Override
protected void convert(BaseViewHolder baseViewHolder, User user) {
baseViewHolder.setText(R.id.item_id, user.getId())
.setText(R.id.item_name, user.getName());
}
}
- 下拉刷新
private void initRefreshLayout() {
mSwipeRefreshLayout.setColorSchemeColors(Color.rgb(47, 223, 189));
mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
// 這里的作用是防止下拉刷新的時(shí)候還可以上拉加載
mAdapter.getLoadMoreModule().setEnableLoadMore(false);
// 下拉刷新,需要重置頁數(shù)
page=0;
//請(qǐng)求數(shù)據(jù)
request();
}
});
}
- 上拉加載
private void initLoadMore() {
mAdapter.getLoadMoreModule().setOnLoadMoreListener(new OnLoadMoreListener() {
@Override
public void onLoadMore() {
//上拉加載時(shí)取消下拉刷新
mSwipeRefreshLayout.setRefreshing(false);
mAdapter.getLoadMoreModule().setEnableLoadMore(true);
//請(qǐng)求數(shù)據(jù)
request();
}
});
mAdapter.getLoadMoreModule().setAutoLoadMore(true);
//當(dāng)自動(dòng)加載開啟忿墅,同時(shí)數(shù)據(jù)不滿一屏?xí)r蒸苇,是否繼續(xù)執(zhí)行自動(dòng)加載更多(默認(rèn)為true)
mAdapter.getLoadMoreModule().setEnableLoadMoreIfNotFullPage(false);
}
下拉上拉共用邏輯處理
private void request()
{
//省略網(wǎng)絡(luò)請(qǐng)求數(shù)據(jù)......
//網(wǎng)絡(luò)請(qǐng)求成功后下拉刷新與上拉加載都做如下處理:
mSwipeRefreshLayout.setRefreshing(false);
mAdapter.getLoadMoreModule().setEnableLoadMore(true);
if (page == 0) {
//如果是加載的第一頁數(shù)據(jù)陡鹃,用 setData()
mAdapter.setList(data);
} else {
//不是第一頁,則用add
mAdapter.addData(data);
}
if (data.size() < PAGE_SIZE) {
//如果不夠一頁,顯示沒有更多數(shù)據(jù)布局
mAdapter.getLoadMoreModule().loadMoreEnd();
} else {
mAdapter.getLoadMoreModule().loadMoreComplete();
}
// page加一
++page;
}
其他常用方法說明
http://www.reibang.com/writer#/notebooks/33139659/notes/68802381/preview