Android recyclerview上拉加载更多
记录一下视频列表(recyclerview)上拉显示一个“加载更多”的item,然后加载数据。
效果图:
实现思路:
1.写两个item布局,一个用来展示数据,一个用来展示加载中也就是滑到最下方的时候显示的“加载更多”。
2.在adapter中写两个viewholder,对应两个xml文件。
3.adapter中重写getItemViewType用来鉴别当前item是不是最后一个,如果是最后一个则加载底部viewholder(代码有详细注释),并且写一个接受数据刷新的方法供外部调用。
4.写一个recyclerview的滑动监听,当滑动到最后一个并且停止滑动时,开始加载更多。
5.给recyclerview设置监听,实现加载更多数据的方法,获取到数据传给adapter
实现代码:
两个xml布局文件比较简单,我就不附代码了。
adpater代码
public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {Context mContext;List<String> mList;public MyAdapter(Context context, List<String> list) {mContext = context;mList = list;}@NonNull@Overridepublic RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {if (viewType == 0) {//你的itemView view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.rv_itme_daily, viewGroup, false);ViewHolder viewHolder = new ViewHolder(view);return viewHolder;} else {//底部“加载更多”itemView view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.rv_item_footer, viewGroup, false);FooterHolder footerHolder = new FooterHolder(view);return footerHolder;}}@Overridepublic void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {if (viewHolder instanceof ViewHolder) {//你的item//展示数据}else if(viewHolder instanceof FooterHolder){//底部“加载更多”item (等待动画用一个gif去实现)Glide.with(mContext).load(R.mipmap.img_load).into(((FooterHolder) viewHolder).ivLoad);}}@Overridepublic int getItemViewType(int position) {if (position == mList.size()) {//最后一个 是底部itemreturn 1;} else {return 0;}}//提供给外部调用的方法 刷新数据public void updateData(List<String> list){//再此处理获得的数据 list为传进来的数据//... list传进来的数据 添加到mList中//最后记得刷新itemnotifyDataSetChanged();}@Overridepublic int getItemCount() {return mList.size() + 1;}//展示数据的item的 viewholderpublic class ViewHolder extends RecyclerView.ViewHolder {@BindView(R.id.jz_player)JzvdStd jzPlayer;@BindView(R.id.tv_title)TextView tvTitle;public ViewHolder(@NonNull View itemView) {super(itemView);ButterKnife.bind(this, itemView);}}//底部"加载更多"item viewholderpublic class FooterHolder extends RecyclerView.ViewHolder {@BindView(R.id.iv_load)ImageView ivLoad;public FooterHolder(View itemView) {super(itemView);ButterKnife.bind(this, itemView);}}
}
EndlessRecyclerOnScrollListener代码
public abstract class EndlessRecyclerOnScrollListener extends RecyclerView.OnScrollListener {//用来标记是否正在向上滑动private boolean isSlidingUpward = false;@Overridepublic void onScrollStateChanged(RecyclerView recyclerView, int newState) {super.onScrollStateChanged(recyclerView, newState);LinearLayoutManager manager = (LinearLayoutManager) recyclerView.getLayoutManager();// 当不滑动时if (newState == RecyclerView.SCROLL_STATE_IDLE) {//获取最后一个完全显示的itemPositionint lastItemPosition = manager.findLastCompletelyVisibleItemPosition();int itemCount = manager.getItemCount();// 判断是否滑动到了最后一个item,并且是向上滑动if (lastItemPosition == (itemCount - 1) && isSlidingUpward) {//加载更多onLoadMore();}}}@Overridepublic void onScrolled(RecyclerView recyclerView, int dx, int dy) {super.onScrolled(recyclerView, dx, dy);// 大于0表示正在向上滑动,小于等于0表示停止或向下滑动isSlidingUpward = dy > 0;}/*** 加载更多回调*/public abstract void onLoadMore();
}
activity/fragment中给recyclerview设置监听:
recyclerview.addOnScrollListener(new EndlessRecyclerOnScrollListener() {@Overridepublic void onLoadMore() {//在这里写获取数据的逻辑//...//获取数据后 传入adapter中上面写的更新数据的方法adapter.updateData(list);}});
Android recyclerview上拉加载更多相关推荐
- 【Android】上拉加载更多,下拉刷新数据快速实现
项目需求 在页面数据中,每次只显示一部分,当手指操作从下往上滑动时,进行请求加载更多数据,当从上往下滑动时,进行整个所有数据的刷新. 需求实现 1.引入依赖 //刷新implementation 'c ...
- android 列表上拉加载更多,Android 下拉刷新,上拉加载更多控件–支持ListView,GridView和ScrollView...
麦洛遇到这样一个需求,实现类似于IOS下拉刷新,上拉加载更多的控件.麦洛google,baidu了一番,网上有不少实现,比较常见的是国外牛人的实现,不过国外的实现基本上都是扩展于ListView,所以 ...
- 手把手教你实现Android RecyclerView上拉加载功能
心灵鸡汤:知之者不如好之者,好之者不如乐之者. 摘要 一直在用到RecyclerView时都会微微一颤,因为一直都没去了解怎么实现上拉加载,受够了每次去Github找开源引入,因为感觉就为了一个上拉加 ...
- Android BaseRecyclerViewAdapterHelper上拉加载更多
private boolean isErr = false; //是否加载错误 private int TOTAL_COUNTER = 16; //一共模拟加载16条数据,所有的数据总数 privat ...
- BaseRecyclerViewAdapterHelper源码解读(四) 上拉加载更多
上拉加载 上拉加载无需监听滑动事件,可自定义加载布局,显示异常提示,自定义异常提示. 此篇文章为BaseRecyclerViewAdapterHelper源码解读第四篇,开源库地址,如果没有看过之前3 ...
- Android RecyclerView封装下拉刷新与上拉加载更多
1 scanlistlibrary 基础组件说明(基于 RecyclerView的封装) 基本数据列表(支持下拉刷新与上拉加载更多) 九宫格数据显示封装(支持下拉刷新与上拉加载更多) 瀑布流数据显示封 ...
- Android滑动冲突解决方式(下拉刷新上拉加载更多,适配RecyclerView/ListView/ScrollView)
一.Android事件的分发机制 这里需要了解下Andorid事件的分发机制.事件分发一般是针对一组事件,即ACTION_DOWN > ACTION_UP 或 ACTION_DOWN > ...
- Android使用RecyclerView实现上拉加载更多,下拉刷新,分组显示
项目地址:点击打开链接(https://github.com/MrGaoGang/luckly_recyclerview) 使用RecyclerView封装headerview,footerView, ...
- Android——RecyclerView自定义OnScrollListener实现下拉刷新监听,上拉加载更多功能
目录 [前言] 1.OnScrollListener滑动事件监听抽象类 2.利用onScrollStateChanged及onScrolled方法实现下拉刷新及上拉加载更多
最新文章
- Prototype和Scriptaculous圣经——《Ajax实战:Prototype与Scriptaculous篇》
- PyTorch基础(part5)--交叉熵
- hue 查询 hbase 操作相关参考
- Oracle 查询单挑语句运行时间
- nodejs调用函数和模块
- svn创建tag包的简单流程
- java 小程序--杨辉三角
- 计算机桌面如何分区,展示电脑如何分区
- 如何解决Maven导入Oracle驱动出现Missing artifact com.oracle:ojdbc14:jar:10.2.0.2.0,Mvaen:com.oracle:ojdbc14:10.
- 个人使用整理的部分测试数据整理-输入类2022
- 如何搭建一个vue项目(完整步骤)
- 银联在线php支付接口,ecshop银联在线支付接口插件(官方版)
- html图片左右滚动播放,CSS3实现横向滚动播放
- 2023新款家用洗地机哪个牌子好?清洁效果好的智能洗地机推荐
- android 自定义拍照模糊,Android自定义相机拍照模糊处理
- Github上最热门的开源项目排行
- 七牛云对象存储设置自己的域名访问(阿里云的域名)
- 求职-在线测评-图形找规律
- 激光位移传感器的原理及信号处理方式
- 重庆市江津区行政边界地图JSON文件精确到城镇街道-geojson-20211208