Android实现下拉刷新,上拉加载

首先,要导入两个依赖(很重要!!!!)
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,跑起来看看~~~~~~~~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值