记录一下视频列表(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上拉加载更多相关推荐

  1. 【Android】上拉加载更多,下拉刷新数据快速实现

    项目需求 在页面数据中,每次只显示一部分,当手指操作从下往上滑动时,进行请求加载更多数据,当从上往下滑动时,进行整个所有数据的刷新. 需求实现 1.引入依赖 //刷新implementation 'c ...

  2. android 列表上拉加载更多,Android 下拉刷新,上拉加载更多控件–支持ListView,GridView和ScrollView...

    麦洛遇到这样一个需求,实现类似于IOS下拉刷新,上拉加载更多的控件.麦洛google,baidu了一番,网上有不少实现,比较常见的是国外牛人的实现,不过国外的实现基本上都是扩展于ListView,所以 ...

  3. 手把手教你实现Android RecyclerView上拉加载功能

    心灵鸡汤:知之者不如好之者,好之者不如乐之者. 摘要 一直在用到RecyclerView时都会微微一颤,因为一直都没去了解怎么实现上拉加载,受够了每次去Github找开源引入,因为感觉就为了一个上拉加 ...

  4. Android BaseRecyclerViewAdapterHelper上拉加载更多

    private boolean isErr = false; //是否加载错误 private int TOTAL_COUNTER = 16; //一共模拟加载16条数据,所有的数据总数 privat ...

  5. BaseRecyclerViewAdapterHelper源码解读(四) 上拉加载更多

    上拉加载 上拉加载无需监听滑动事件,可自定义加载布局,显示异常提示,自定义异常提示. 此篇文章为BaseRecyclerViewAdapterHelper源码解读第四篇,开源库地址,如果没有看过之前3 ...

  6. Android RecyclerView封装下拉刷新与上拉加载更多

    1 scanlistlibrary 基础组件说明(基于 RecyclerView的封装) 基本数据列表(支持下拉刷新与上拉加载更多) 九宫格数据显示封装(支持下拉刷新与上拉加载更多) 瀑布流数据显示封 ...

  7. Android滑动冲突解决方式(下拉刷新上拉加载更多,适配RecyclerView/ListView/ScrollView)

    一.Android事件的分发机制 这里需要了解下Andorid事件的分发机制.事件分发一般是针对一组事件,即ACTION_DOWN > ACTION_UP 或 ACTION_DOWN > ...

  8. Android使用RecyclerView实现上拉加载更多,下拉刷新,分组显示

    项目地址:点击打开链接(https://github.com/MrGaoGang/luckly_recyclerview) 使用RecyclerView封装headerview,footerView, ...

  9. Android——RecyclerView自定义OnScrollListener实现下拉刷新监听,上拉加载更多功能

    目录 [前言] 1.OnScrollListener滑动事件监听抽象类 2.利用onScrollStateChanged及onScrolled方法实现下拉刷新及上拉加载更多

最新文章

  1. Prototype和Scriptaculous圣经——《Ajax实战:Prototype与Scriptaculous篇》
  2. PyTorch基础(part5)--交叉熵
  3. hue 查询 hbase 操作相关参考
  4. Oracle 查询单挑语句运行时间
  5. nodejs调用函数和模块
  6. svn创建tag包的简单流程
  7. java 小程序--杨辉三角
  8. 计算机桌面如何分区,展示电脑如何分区
  9. 如何解决Maven导入Oracle驱动出现Missing artifact com.oracle:ojdbc14:jar:10.2.0.2.0,Mvaen:com.oracle:ojdbc14:10.
  10. 个人使用整理的部分测试数据整理-输入类2022
  11. 如何搭建一个vue项目(完整步骤)
  12. 银联在线php支付接口,ecshop银联在线支付接口插件(官方版)
  13. html图片左右滚动播放,CSS3实现横向滚动播放
  14. 2023新款家用洗地机哪个牌子好?清洁效果好的智能洗地机推荐
  15. android 自定义拍照模糊,Android自定义相机拍照模糊处理
  16. Github上最热门的开源项目排行
  17. 七牛云对象存储设置自己的域名访问(阿里云的域名)
  18. 求职-在线测评-图形找规律
  19. 激光位移传感器的原理及信号处理方式
  20. 重庆市江津区行政边界地图JSON文件精确到城镇街道-geojson-20211208

热门文章

  1. html颜色代码 糖果色,75平米糖果色跃层家 绚丽色彩散发迷人魅力
  2. Oracle comment添加注释
  3. 【HTML------樱花雨】
  4. python比较运算符中大于等于且小于等于的表达方式
  5. 浅析加密算法五【DES密码】
  6. 如何采集小红书最新版(2018年9月)数据
  7. PS图层混合算法之二(线性加深,线性减淡,变亮,变暗)
  8. 计算机版学猫叫歌,抖音学猫叫是什么歌
  9. 如何通过 Apple Watch 解锁 Mac !
  10. PS改变背景图片/颜色(3种方法)