首先,要导入两个依赖(很重要!!!!)
App——>build gradle——>Sync Now(右上角)
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0' //1.0.5及以前版本的老用户升级需谨慎,API改动过大
implementation 'com.scwang.smartrefresh:SmartRefreshHeader:1.1.0' //没有使用特殊Header,可以不加这行
OK!开始敲代码实现~~~~~~~
1、新建Activity活动,实现相应逻辑
package com.wmc.loginapplication;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.os.Bundle;
import com.scwang.smartrefresh.layout.SmartRefreshLayout;
import com.scwang.smartrefresh.layout.api.RefreshLayout;
import com.scwang.smartrefresh.layout.constant.SpinnerStyle;
import com.scwang.smartrefresh.layout.footer.BallPulseFooter;
import com.scwang.smartrefresh.layout.footer.ClassicsFooter;
import com.scwang.smartrefresh.layout.header.BezierRadarHeader;
import com.scwang.smartrefresh.layout.header.ClassicsHeader;
import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener;
import com.scwang.smartrefresh.layout.listener.OnRefreshListener;
import java.util.ArrayList;
import java.util.List;
public class RefreshActivity extends AppCompatActivity {
private SmartRefreshLayout refreshLayout ;//刷新布局
private RecyclerView recyclerView ;//列表布局
private RecyclerViewListDemoAdapter adapter ;//适配器
private List<Entity> data ;//要设置的数据
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_refresh);
recyclerView = findViewById(R.id.recyclerView) ;
refreshLayout = findViewById(R.id.refreshLayout);
//设置布局管理器
recyclerView.setLayoutManager(new LinearLayoutManager(this));
//设置适配器
adapter = new RecyclerViewListDemoAdapter(this);
recyclerView.setAdapter(adapter);
//下拉刷新
refreshLayout.setRefreshHeader(new ClassicsHeader(this));
//上拉加载
refreshLayout.setRefreshFooter(new ClassicsFooter(this));
//为下来刷新添加事件
refreshLayout.setOnRefreshListener(new OnRefreshListener() {
@Override
public void onRefresh(RefreshLayout refreshlayout) {
initData();
refreshlayout.finishRefresh(2000/*,false*/);//传入false表示刷新失败
}
});
//为上拉下载添加事件
refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() {
@Override
public void onLoadMore(RefreshLayout refreshlayout) {
initData();
refreshlayout.finishLoadMore(2000/*,false*/);//传入false表示加载失败
}
});
}
//为每一次刷新添加数据
private void initData() {
data = new ArrayList<>();
for (int i = 0; i < 5; i++) {
Entity entity = new Entity("index" + i);
data.add(entity);
}
adapter.addData(data);
}
}
2、设置活动布局XML文件
<?xml version="1.0" encoding="utf-8"?>
<com.scwang.smartrefresh.layout.SmartRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/refreshLayout"
tools:context=".RefreshActivity">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:overScrollMode="never"
android:background="#fff" />
</com.scwang.smartrefresh.layout.SmartRefreshLayout>
3、设置适配器
package com.wmc.loginapplication;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
import java.util.List;
//自定义适配器
public class RecyclerViewListDemoAdapter extends RecyclerView.Adapter<RecyclerViewListDemoAdapter.ListViewHolder> {
private List<Entity> data;
private Context context ;
private RecyclerViewActivity.OnItemClickListener onItemClickListener;
public RecyclerViewListDemoAdapter(Context context)
{
this.context = context;
}
public void setOnItemClickListener(RecyclerViewActivity.OnItemClickListener onItemClickListener)
{
this.onItemClickListener = onItemClickListener;
}
public RecyclerViewListDemoAdapter(List<Entity> data)
{
this.data = data;
}
public void setData(List<Entity> data)
{
this.data = data;
// 刷新数据
notifyDataSetChanged();
}
//为相应逻辑添加数据
public void addData(List<Entity> entities)
{
if (data == null)
{
data = new ArrayList<>();
}
this.data.addAll(entities);
notifyDataSetChanged();
}
/**
*创建一个viewHolder并返回
* @param parent 相当于Item存放的容器
* @param viewType 指定布局文件的类型
* @return 返回viewHolder对象
*/
@NonNull
@Override
public ListViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
//指定对应的布局文件
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_list_demo,parent,false);
return new ListViewHolder(view);
}
/**
* 将数据加载到布局文件的控件上
* @param holder 需要绑定数据的viewHolder
* @param position 列表数据的下标
*/
@Override
public void onBindViewHolder(@NonNull RecyclerViewListDemoAdapter.ListViewHolder holder, final int position) {
Entity entity = data.get(position);
holder.textView.setText(entity.getMsg());
//将绑定的布局设置点击事件
holder.textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(onItemClickListener!=null){
onItemClickListener.itemClick(position,v);
}
}
});
}
/**
*返回数据的大小
* @return
*/
@Override
public int getItemCount() {
return data == null ? 0 : data.size();
}
//为了系统复用控件
static class ListViewHolder extends RecyclerView.ViewHolder
{
TextView textView;
public ListViewHolder(@NonNull View itemView)
{
super(itemView);
// 实例化该控件
textView = itemView.findViewById(R.id.tv_text);
}
}
}
4、现在所有的逻辑都已经实现了,添加一个Entity实体
package com.wmc.loginapplication;
import android.os.Parcel;
import android.os.Parcelable;
public class Entity implements Parcelable
{
private int count;
private String msg;
public Entity(int count)
{
this.count = count;
}
public Entity(int count, String msg)
{
this.count = count;
this.msg = msg;
}
public Entity(String msg)
{
this.msg = msg;
}
public int getCount()
{
return count;
}
public void setCount(int count)
{
this.count = count;
}
public String getMsg()
{
return msg;
}
public void setMsg(String msg)
{
this.msg = msg;
}
@Override
public int describeContents() { return 0; }
@Override
public void writeToParcel(Parcel dest, int flags)
{
dest.writeInt(this.count);
dest.writeString(this.msg);
}
protected Entity(Parcel in)
{
this.count = in.readInt();
this.msg = in.readString();
}
public static final Parcelable.Creator<Entity> CREATOR = new Parcelable.Creator<Entity>()
{
@Override
public Entity createFromParcel(Parcel source) {return new Entity(source);}
@Override
public Entity[] newArray(int size) {return new Entity[size];}
};
}
OK,跑起来看看~~~~~~~~