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,跑起来看看~~~~~~~~
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- Android自定义View之快速实现下拉刷新, 点击加载更多ListView
- Android使用PullToRefresh实现上拉加载和下拉刷新效果的代码
- [ Android界面实现 ] ZListView,一个最强大的刷新、加载、滑动删除的 ListView 控件(一)
- android使用PullToRefresh实现上拉加载和下拉刷新效果
- Android开发丶谷歌官方刷新控件SwipeRefreshLayout下拉刷新的实现和上拉加载的拓展
- android使用PullToRefresh实现上拉加载和下拉刷新效果
- Android中使用ListView实现分页刷新(线程休眠模拟)(滑动加载列表)
- 【Android界面实现】整合了刷新、加载更多、滑动删除功能的XListview
- android 自定义listview——实现上拉刷新下拉加载的功能
- 【Android界面实现】ZListView,一个最强大的刷新、加载、滑动删除的ListView控件(二)
- 【Android界面实现】整合了刷新、加载更多、滑动删除功能的XListview
- Android RecyclerView (四)总结(一)-(三)并且实现下拉刷新数据,上拉加载数据功能
- Android自定义listview布局实现上拉加载下拉刷新功能
- Android应用ViewPager和TabLayout动态加载Fragment,并实现view和tab动态刷新。
- 【Android界面实现】ZListView,一个最强大的刷新、加载、滑动删除的ListView控件(一)
- Android开发之ListView列表刷新和加载更多实现方法
- Android-PullToRefresh库实现上拉刷新下拉加载
- Android下拉加载,上拉刷新的实现
- 使用Android开源工具PullToRefresh实现上啦刷新下拉加载
- android使用PullToRefresh实现上拉加载和下拉刷新效果