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版本中开启上拉加载与下拉刷新 需要实现LoadMoreModule接口
public class MyAdapter extends BaseQuickAdapter<User, BaseViewHolder> implements LoadMoreModule
{
/**
* 构造方法,在实例化Adapter时就传入了一个List。
* 如果后期设置数据,刚开始不需要传入初始List,直接调用 super(layoutResId); 即可
*/
public MyAdapter(int layoutResId, List<User> data) {
super(layoutResId, data);
}
/**
* 在此方法中设置item数据
*/
@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() {
// 这里的作用是防止下拉刷新的时候还可以上拉加载
mAdapter.getLoadMoreModule().setEnableLoadMore(false);
// 下拉刷新,需要重置页数
page=0;
//请求数据
request();
}
});
}
- 上拉加载
private void initLoadMore() {
mAdapter.getLoadMoreModule().setOnLoadMoreListener(new OnLoadMoreListener() {
@Override
public void onLoadMore() {
//上拉加载时取消下拉刷新
mSwipeRefreshLayout.setRefreshing(false);
mAdapter.getLoadMoreModule().setEnableLoadMore(true);
//请求数据
request();
}
});
mAdapter.getLoadMoreModule().setAutoLoadMore(true);
//当自动加载开启,同时数据不满一屏时,是否继续执行自动加载更多(默认为true)
mAdapter.getLoadMoreModule().setEnableLoadMoreIfNotFullPage(false);
}
下拉上拉共用逻辑处理
private void request()
{
//省略网络请求数据......
//网络请求成功后下拉刷新与上拉加载都做如下处理:
mSwipeRefreshLayout.setRefreshing(false);
mAdapter.getLoadMoreModule().setEnableLoadMore(true);
if (page == 0) {
//如果是加载的第一页数据,用 setData()
mAdapter.setList(data);
} else {
//不是第一页,则用add
mAdapter.addData(data);
}
if (data.size() < PAGE_SIZE) {
//如果不够一页,显示没有更多数据布局
mAdapter.getLoadMoreModule().loadMoreEnd();
} else {
mAdapter.getLoadMoreModule().loadMoreComplete();
}
// page加一
++page;
}
其他常用方法说明
https://www.jianshu.com/writer#/notebooks/33139659/notes/68802381/preview