XRecyclerView 快速教你实现分页加载
先看效果
Android分页效果
分页加载逻辑
- 我们首先需要知道我们拿到数据之后页面展示的是第一页的十条数据
- 当我们手指往下滑动是松开这个时候是会刷新的刷新就是把之前的数据给清空拿到最新请求道的十条数据展示给我们的用户
- 我们在触碰列表手指往上拉的时候数据会滑动滑动到底部松开这个时候数据就会请求第二页的数据第一页的数据还会保留在我们的集合当中然后依次追加知道没有数据时就不能继续滑动
第一步还是老样子 先导入我们的XRecyclerView依赖
implementation 'com.jcodecraeer:xrecyclerview:1.5.8'
第二步依赖导入完成之后就是要使用我们的XRecyclerView布局
<com.jcodecraeer.xrecyclerview.XRecyclerView
android:layout_width="match_parent"
android:id="@+id/xrv"
android:layout_height="match_parent">
</com.jcodecraeer.xrecyclerview.XRecyclerView>
第三步展示我们接口中的列表数据
package com.wd.qn.activity;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import android.os.Bundle;
import com.jcodecraeer.xrecyclerview.XRecyclerView;
import com.wd.qn.R;
import com.wd.qn.adapter.MyAdapter;
import com.wd.qn.base.BaseActivity;
import com.wd.qn.base.BasePreanter;
import com.wd.qn.bean.UploadPictures;
import com.wd.qn.contreanter.Contreanter;
import com.wd.qn.preanter.IPreanter;
import java.util.ArrayList;
import java.util.List;
public class Main4Activity extends BaseActivity implements Contreanter.IView {
private XRecyclerView xRecyclerView;
private List<UploadPictures.ResultBean> beanList=new ArrayList<>();//自己创建一个集合
private MyAdapter myAdapter;
private int i=1;//是我们的页数
@Override
protected int getLayoutId() {
return R.layout.activity_main4;
}
@Override
protected void initView() {
xRecyclerView = findViewById(R.id.xrv);
}
@Override
protected BasePreanter initPreantert() {
return new IPreanter(this);
}
@Override
protected void initModel() {
}
@Override
protected void initData() {
BasePreanter basePreanter = getmPreantert();
if(basePreanter instanceof Contreanter.IPreanter){
((Contreanter.IPreanter) basePreanter).SuccesssCoallack(15,i,10);
}
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getApplicationContext());
xRecyclerView.setLayoutManager(linearLayoutManager);
myAdapter = new MyAdapter(getApplicationContext(), beanList);
xRecyclerView.setAdapter(myAdapter);
}
@Override
public void OnSuccess(UploadPictures uploadPictures) {
List<UploadPictures.ResultBean> result = uploadPictures.getResult();
beanList=result;
}
}
MyAdapter类
package com.wd.qn.adapter;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.resource.bitmap.CircleCrop;
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
import com.bumptech.glide.request.RequestOptions;
import com.jcodecraeer.xrecyclerview.XRecyclerView;
import com.wd.qn.R;
import com.wd.qn.bean.UploadPictures;
import java.util.List;
public class MyAdapter extends XRecyclerView.Adapter<XRecyclerView.ViewHolder> {
Context context; List<UploadPictures.ResultBean> list;
public MyAdapter(Context context, List<UploadPictures.ResultBean> list) {
this.context = context;
this.list = list;
}
public void resume(List<UploadPictures.ResultBean> list){
//定义一个方法为我们的下拉刷新做处理
this.list.clear();
}
public void load(List<UploadPictures.ResultBean> list){
//定义一个加载数据的方法为我们上拉的时候加载第二页数据做处理
this.list.addAll(list);
notifyDataSetChanged();
}
@NonNull
@Override
public XRecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View inflate = View.inflate(context, R.layout.item, null);
return new ViewHorder(inflate);
}
@Override
public void onBindViewHolder(@NonNull XRecyclerView.ViewHolder holder, int position) {
UploadPictures.ResultBean resultBean = list.get(position);
String name = resultBean.getName();
((ViewHorder)holder).tv.setText(name);
String starring = resultBean.getStarring();
((ViewHorder)holder).tv1.setText(starring);
String imageUrl = resultBean.getImageUrl();
Glide.with(context).load(imageUrl).apply(RequestOptions.bitmapTransform(new RoundedCorners(20))).into(((ViewHorder)holder).im);
}
@Override
public int getItemCount() {
return list.size();
}
class ViewHorder extends RecyclerView.ViewHolder {
private final ImageView im;
private final TextView tv,tv1;
public ViewHorder(@NonNull View itemView) {
super(itemView);
im = itemView.findViewById(R.id.imv);
tv = itemView.findViewById(R.id.text);
tv1 = itemView.findViewById(R.id.text1);
}
}
}
这个时候我们要知道XRecyclerView有一个滑动监听的属性
xRecyclerView.setLoadingListener(new XRecyclerView.LoadingListener() {
@Override public void onRefresh() { //手指下滑刷新触发事件 } @Override public void onLoadMore() { //手指上拉触发加载数据事件 } } );
数据显示正常了 这个时候我们就要做分页效果
xRecyclerView.setLoadingListener(new XRecyclerView.LoadingListener() {
@Override
public void onRefresh() {
j=1;
myAdapter.resume(beanList);
BasePreanter basePreanter = getmPreantert();
if(basePreanter instanceof Contreanter.IPreanter){
((Contreanter.IPreanter) basePreanter).SuccesssCoallack(15,j,10);
}
LinearLayoutManager linearLayoutManager1 = new LinearLayoutManager(getApplicationContext());
xRecyclerView.setLayoutManager(linearLayoutManager1);
}
@Override
public void onLoadMore() {
j++;
if(beanList.size()>=10){
BasePreanter basePreanter = getmPreantert();
if(basePreanter instanceof Contreanter.IPreanter){
((Contreanter.IPreanter) basePreanter).SuccesssCoallack(15,j,10);
}
}
xRecyclerView.loadMoreComplete();
}
});
最后在我们的契约类里面成功的方法进行我们数据的加载
@Override
public void OnSuccess(UploadPictures uploadPictures) {
List<UploadPictures.ResultBean> result = uploadPictures.getResult();
beanList=result;
myAdapter.load(beanList);//调用我们的数据加载方法把我们请求的数据存放到这个集合当中进行加载
xRecyclerView.loadMoreComplete();//loadMoreComplete 加载完成之后停止操作
xRecyclerView.refreshComplete();//refreshComplete 刷新完成之后停止
}