您的位置:首页 > 移动开发 > Android开发

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

2020-01-15 11:46 1966 查看

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

  • 点赞
  • 收藏
  • 分享
  • 文章举报
奔跑中的小猿 发布了34 篇原创文章 · 获赞 0 · 访问量 235 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐