第一步引入SmartRefreshLayout+RecyclerView包
implementation ("com.scwang.smartrefresh:SmartRefreshLayout:1.1.0-alpha-28")
implementation ("com.scwang.smartrefresh:SmartRefreshHeader:1.1.0-alpha-28")
implementation ("androidx.recyclerview:recyclerview:1.1.0")
第二步实现布局
<com.scwang.smartrefresh.layout.SmartRefreshLayout
android:id="@+id/refreshView"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerview3"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</com.scwang.smartrefresh.layout.SmartRefreshLayout>
第三步Activity主要代码
SmartRefreshLayout smartRefreshLayout;
RecyclerView recyclerView;recyclerView = findViewById(R.id.recyclerview3);
smartRefreshLayout=findViewById(R.id.refreshView);
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
cList = new ArrayList<>(); //为自己的数据集合
recyclerView.setLayoutManager(layoutManager);
//下拉刷新和上拉加载监听
//设置下拉刷新和上拉加载样式,默认样式
smartRefreshLayout.setRefreshHeader(new ClassicsHeader(this));
smartRefreshLayout.setRefreshFooter(new BallPulseFooter(this).setSpinnerStyle(SpinnerStyle.Scale));
//下拉刷新和上拉加载更新数据
smartRefreshLayout.setOnMultiPurposeListener(new SimpleMultiPurposeListener(){
@Override
public void onRefresh(@NonNull RefreshLayout refreshLayout) {
super.onRefresh(refreshLayout);
onRefsh();
smartRefreshLayout.finishRefresh(1000);
}
@Override
public void onLoadMore(@NonNull RefreshLayout refreshLayout) {
super.onLoadMore(refreshLayout);
smartRefreshLayout.finishLoadMore(2000);
//获取试图总条目
int count = adapter.getItemCount();
//如果当前试图总条目==集合长度
if (count == mList.size()) {
smartRefreshLayout.finishLoadMore(1000);
Toast.makeText(this, "数据已全部加载完成", Toast.LENGTH_SHORT).show();
}else{
//上拉每次取10条记录加到cList中
pageNo++;
if(pageSize<mList.size()){
getData(pageNo*10,pageSize);
}else{
getData(pageNo*10,mList.size());
}
adapter.notifyDataSetChanged();
smartRefreshLayout.finishLoadMore(2000);
}
}
});
//首次进入页面自动刷新
smartRefreshLayout.autoRefresh();
public void onRefsh(){
cList.clear();
if(pageSize>mList.size()){
pageSize = mList.size();
}
getData(0,pageSize);
refleshAdapter(cList);
}
private void refleshAdapter(List<MTORDER_INSite> cl){
adapter=new SQLiteQueryAdapter(cl);
recyclerView.setAdapter(adapter);
/*3、添加item的添加和移除动画, 这里我们使用系统默认的动画*/
recyclerView.setItemAnimator(new DefaultItemAnimator());
}
public void getData(int pageNo,int pageSize){
for (int i = pageNo; i < pageSize; i++) {
cList.add(mList.get(i));
}
}
Adapter代码
public class SQLiteQueryAdapter extends RecyclerView.Adapter<SQLiteQueryAdapter.InnerHolder> {
//从数据源获取的数组存入list,demo的数据源是模拟,在代码中生成
private List<MTORDER_INSite> list;
//1.定义接口
public interface OnClickListener {
void onClick(View v, int position);
}
public interface OnUpdateClickListener {
void onClick(View v, int position);
}
public interface OnDeleteClickListener {
void onClick(View v, int position);
}
public interface OnLongClickListener {
void onLongClick(View v, int position);
}
//2.声明接口
private OnClickListener onClickListener;
private OnUpdateClickListener OnUpdateClickListener;
private OnDeleteClickListener OnDeleteClickListener;
private OnLongClickListener onLongClickListener;
//3.set接口
public void setOnUpdateClickListener(OnUpdateClickListener onUpdateClickListener) {
this.OnUpdateClickListener = onUpdateClickListener;
}
public void setOnDeleteClickListener(OnDeleteClickListener onDeleteClickListener) {
this.OnDeleteClickListener = onDeleteClickListener;
}
public void setOnClickListener(OnClickListener onClickListener) {
this.onClickListener = onClickListener;
}
public void setOnLongClickListener(OnLongClickListener onLongClickListener) {
this.onLongClickListener = onLongClickListener;
}
public SQLiteQueryAdapter(List<MTORDER_INSite> list) {
this.list = list;
}
@NonNull
@Override
public InnerHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
//将XML布局文件,加载到Java代码(和Activity的onCreate()的setContentVIew()作用一样),参数先复制粘贴,感兴趣可去研究传不同参数的效果
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_listsqlite, null, false);
//设置背景也可以在XML中设置
view.setClickable(true);
return new InnerHolder(view);
}
@SuppressLint("ResourceAsColor")
@Override
public void onBindViewHolder(@NonNull InnerHolder holder, @SuppressLint("RecyclerView") int position) {
holder.textViewSdate.setText(list.get(position).KF_IDNAME);
holder.textViewCl.setText(list.get(position).PUR_ORDER_ID+"|"+list.get(position).SDATE);
holder.textViewQdOutId.setText(list.get(position).KF_ID+"");
if(list.get(position).MESSAGE.contains("上传成功")){
holder.textViewMemo.setTextColor(R.color.green);
}else if(list.get(position).MESSAGE.contains("上传失败")){
holder.textViewMemo.setTextColor(R.color.red);
}else{
holder.textViewMemo.setTextColor(R.color.colorConfirm);
}
holder.textViewMemo.setText(list.get(position).MESSAGE);
if (onClickListener != null) {
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onClickListener.onClick(v, position);
}
});
}
if (onLongClickListener != null) {
holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
onLongClickListener.onLongClick(v, position);
return true;
}
});
}
}
@Override
public int getItemCount() {
return list == null ? 0 : list.size();
}
/**
* 内部类,继承RecyclerView.ViewHolder,作用就是声明item中的控件,findViewById
*/
public class InnerHolder extends RecyclerView.ViewHolder {
TextView textViewSdate;
TextView textViewCl;
TextView textViewMemo;
TextView textViewQdOutId;
Button btnDel;
public InnerHolder(@NonNull View itemView) {
super(itemView);
textViewSdate = itemView.findViewById(R.id.rksdate);
textViewCl = itemView.findViewById(R.id.rkOrderId);
textViewQdOutId = itemView.findViewById(R.id.tkf_id);
textViewMemo = itemView.findViewById(R.id.message);
}
}
}