RecyclerView和ListView实现上下拉刷新的方式的汇总

RecyclerView和ListView的区别 ListView和RecyclerView最大的区别在于数据源改变时的缓存的处理逻辑,ListView是"一锅端",将所有的mActiveViews都移入了二级缓存mScrapViews,而RecyclerView则是更加灵活地对每个View修改标志位,区分是否重新bindView。2). ListView缓存View。dispathLayoutStep3():计算布局前后各个ItemView的状态,如Remove,Add,Move,Update等,如有必要执行相应的动画. 阅读详情

RecyclerView实现上下拉刷新的方式:

常用的三种:

第一种:

SwipeRefreshLayout  这是goolge官方提供的实现下拉刷新的方式用法是用SwipeRefreshLayout包裹RecyclerView
在
SwipeRefreshLayout对象控件上设置下拉刷新的效果  
至于上拉刷新可以通过给RecyclerView添加addScrollListener()这个监听来实现,具体代码实现如下:

        //只有下拉刷新效果
        refreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                if(curPage!=1)
                {
                    curPage=1;
                    initData(curPage);
                    //数据加载完之后就将刷新撤掉

                }
                refreshLayout.setRefreshing(false);
            }
        });
        /*
         *上拉加载下一页
         */
        recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
            //滚动状态改变回调方法
            @Override
            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                super.onScrollStateChanged(recyclerView, newState);
                //如果数据源中的数据都已经显示出来且屏幕停止了滚动 那么开始加载下一屏幕的数据
                if ((lastVisibleItemPosition+1==adapter.getItemCount()&&(newState ==RecyclerView.SCROLL_STATE_IDLE)))
                {
                    curPage ++;
                    initData(curPage);
                }

            }
            //滚动停止之后回调的方法
            @Override
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                super.onScrolled(recyclerView, dx, dy);
                //停止滚动之后用布局管理器获取最后一个可见的item的位置
                lastVisibleItemPosition = linearLayoutManager.findLastVisibleItemPosition();
            }
        });
第二种引入第三方控件

in.srain.cube.views.ptr.PtrFrameLayout 在gradle中导包使用方式也是把recyclerView包裹
具体的实现上下拉刷新的 代码如下:
        //效果1 :设置默认的经典头视图
        PtrClassicDefaultHeader header =new PtrClassicDefaultHeader(context);
        //效果2:特殊效果 目前只支持英文字符(闪动的文字header效果)
        final StoreHouseHeader storeHouseHeader =new StoreHouseHeader(this);
        //storeHouseHeader.setPadding(0,30,0,0);
        //头上文字背景颜色
        storeHouseHeader.setBackgroundColor(Color.BLUE);
        //头上文字颜色
        storeHouseHeader.setTextColor(Color.WHITE);
        //设置显示的文字 文字只可以是字母或者数字
        storeHouseHeader.initWithString("LOADING...");
        //为PtrFrameLayout设置下拉刷新的头视图
        ptrFrameLayout.setHeaderView(storeHouseHeader);
        //绑定ui与刷新状态的监听
        ptrFrameLayout.addPtrUIHandler(storeHouseHeader);
        ptrFrameLayout.autoRefresh(true);
        //添加刷新的动作监听
        ptrFrameLayout.setPtrHandler(new PtrDefaultHandler() {
            @Override
            public void onRefreshBegin(PtrFrameLayout frame) {
                 /*
                  *youwent
                  */
                   curPage =1;

                   loadData(curPage);



            }
        });


      //设置上拉刷新
        recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                super.onScrollStateChanged(recyclerView, newState);
                if ((lastVisibleItemPosition+1==adapter.getItemCount())&&newState==RecyclerView.SCROLL_STATE_IDLE)
                {
                    curPage++;
                    loadData(curPage);
                    Log.i(" curPage = ;","=======>"+curPage);


                }
            }
         //滚动完后才能之后 的回调
            @Override
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                super.onScrolled(recyclerView, dx, dy);
                //当前页面最后一个可见元素位置
               lastVisibleItemPosition = manager.findLastVisibleItemPosition();

            }
        });
第三种是引用github上一位大神写的第三方类库
引入模块的方式  androidstudio---file----new----import module ----引入module即可----最后海淀add 到gradle文件
布局中就使用这个第三方的RecyclerView即可
//         头部
//         headerView = LayoutInflater.from(this).inflate(R.layout.header_view, null);
//         脚部
//         footerView = LayoutInflater.from(this).inflate(R.layout.footer_view, null);
//        添加头部和脚部,如果不添加就使用默认的头部和脚部(头部可以有多个)
//        mRecyclerView.addHeaderView(headerView);
//     设置头部的最大拉伸倍率,默认1.5f,必须写在setHeaderImage()之前
//       mRecyclerView.setScaleRatio(2.0f);
//     设置下拉时拉伸的图片,不设置就使用默认的
//     mRecyclerView.setHeaderImage((ImageView) headerView.findViewById(R.id.iv_hander));
//     mRecyclerView.addFootView(footerView);

    private void initView() {
        recyclerView = (AnimRFRecyclerView) findViewById(R.id.animRecyclerView);
        //设置布局管理器
     //    manager = new LinearLayoutManager(context);
        AnimRFLinearLayoutManager linearLayoutManager =new AnimRFLinearLayoutManager(context);
        recyclerView.setLayoutManager(linearLayoutManager);
        recyclerView.addItemDecoration(new DividerGridItemDecoration(context));
        recyclerView.setItemAnimator(new DefaultItemAnimator());
        recyclerView.setLoadDataListener(new AnimRFRecyclerView.LoadDataListener() {
            @Override
            public void onRefresh() {


                    curPage=1;
                    column=1;
                    loadData();
          //有个小问题 下拉刷新有bug
              recyclerView.refreshComplate();


            }

            @Override
            public void onLoadMore() {
            curPage++;

             loadData();
               recyclerView.loadMoreComplate();
            }
        });
ListView的上下拉刷新的方式:
RecyclerView的前两种方式完全试用于ListView,ListView也被大神延伸出来了第三方的类库,PullToRefreshListView
用法也同上。

上面所有引用的第三方控件或者类库在zip文件夹中都有 而且zip文件夹中还有我做的一个小小的demo展示了上下拉刷新的实现
以及RecyclerView的多布局 CardView Toolbar登控件的使用
RecyclerView多布局的关键方法是getItemViewType 返回值是每种布局的编号,有多少种布局就需要创建多少种ViewHolder的子类

然后根据不同的itemType在 RecyclerView.ViewHolder onCreateViewHolder 返回不同的viewhoder对象
再根据不同的viewholder对象在BindViewHoder类中进行对item中的每个控件进行赋值




【Android】 RecyclerView、ListView实现单选列表的优雅之路 /TextView@Override//实现单选,第一种方法,十分简单, Lv Rv通用,因为它们都有notifyDataSetChanged()方法// 每次点击时,先将所有的selected设为false,并且将当前点击的item 设为true, 刷新整个视图}); 阅读详情

相关推荐

RecyclerView和ListView使用对比分析

又到了更新博文的时间了,最近在看一本很不错的心理学书籍,名字叫做 《拖延心理学》,封面长下面这样子书的内容主要是分析拖延症患者是如何把一件事一拖再拖,最后引发最终心里的焦虑和不安,甚至找了各种借口来做一些然并卵的自我安慰,最后再告诉你如何去改善自己的拖延症。目前我看了这书大约六分之一,就被各种心理分析打脸无数次,奈何此书写得太好,所以分享给有需要的童鞋(拖延症患者做好被无情打脸的心理准备)。刚好本...

D_clock爱吃葱花 1481

【亲测免费】 React Native RecyclerView List 使用指南

React Native RecyclerView List 使用指南 1. 项目介绍 React Native RecyclerView List 是一个专为React Native设计的高度优化的列表组件,旨在提供类似于Android的RecyclerView和iOS的UICollectionView的功能。该库特别适合构建具有复杂布局需求和大量数据项的应用场景,通过高效的视图回收机制(ce...

gitblog_00971的博客 1231

安卓下拉上拉刷新相关-AnimRefreshRecyclerViewDemo下拉刷新和上拉加载更多的.rar

AnimRefreshRecyclerViewDemo下拉刷新和上拉加载更多的.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。

React Native笔记(一):封装android原生列表组件给rn使用

背景 react native官方提供的FlatList与原生RecyclerView相比: 仅创建可见区域的视图,两者是一致的。 FlatList没有cell recycling,重用item view。 FlatList中将不可见的视图从内存中移除,但同时也会导致大量的视图重新创建以及垃圾回收。如果不断的创建视图,在列表滚动的过程中,内存占用量会不断增加。而原生的recyclerview因为能复用视图,所以在快速滑动的时候性能上影响不大。并且rn又支持封装原生组件给rn使用,于是产生了封装recyc

ZBM来了 3890

RecyclerView 和 ListView 使用对比分析

RecyclerView 和 ListView 使用对比分析

RecyclerView实现上拉,下拉功能

RecyclerView实现上拉,下拉功能

【进阶】RecyclerView源码解析(二)——缓存机制

1.【进阶】RecyclerView源码解析(一)——绘制流程 2.【进阶】RecyclerView源码解析(二)——缓存机制 3.【进阶】RecyclerView源码解析(三)——深度解析缓存机制 引言 接着上一篇博客分析完RecyclerView的绘制流程,其实对RecyclerView已经有了一个大体的了解,尤其是RecyclerView和LayoutManag...

被代码淹没的小伙子的博客 2784

recycleView超好用下拉刷新和上拉加载

该库实现了recycleview的下拉刷新和上拉加载,可以自由定制,可修改源代码达到自己想要的效果

RecycleView与ListView的区别(最全???)

1. RecycleView的简单使用: 找了个参考 这个, 不多叙述(没啥好看的) 主要工作是继承RecycleView.Adapter,并重写 1.RecyclerView.ViewHolder 2.onCreateViewHolder()用于创建ViewHolder实例,并把加载的布局传入到构造函数去,再把ViewHolder实例返回。 3.onBindViewHolder()则是用于对子项的数据进行赋值,会在每个子项被滚动到屏幕内时执行。position得到当前项的Fruit实例。 .

CL 2664

android RecycleView实现下拉刷新和上拉加载

主要介绍了android RecycleView实现下拉刷新和上拉加载,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

鱼眼双目测距实战:从OpenCV标定到SGBM匹配的完整流程解析

本文详细解析了鱼眼双目测距的完整流程,从OpenCV标定到SGBM匹配,涵盖标定、校正、匹配和测距四个关键阶段。通过实战经验分享,帮助开发者解决鱼眼镜头强畸变带来的测距挑战,提升测距精度至5%以内。特别适合机器人导航、自动驾驶和VR领域的开发者参考。

weixin_27298377的博客 123

RecyclerView和ListView的区别、RecyclerView优化

一 ListView和RecyclerView区别 ListView 1.Adapter继承的是BaseAdapter。 2.可以直接在布局中设置分割线。 3.点击事件自带setOnItemClickListener方法 4.自带增加头部尾部方法 addHeaderView和addFooterView...

无与伦比的猪 4144

一生一芯 预学习阶段 NEMU代码学习(2)

如果 nemu_state.state == NEMU_ABORT:说明程序处于 "中止" 状态,输出 "ABORT",并且使用 ANSI_FG_RED 红色格式化显示。如果 halt_ret == 0,表示程序正常终止(触发了 "GOOD TRAP"),输出 "HIT GOOD TRAP",并使用 ANSI_FG_GREEN 绿色显示。如果要执行的指令数量 n 小于预定义的常量 MAX_INST_TO_PRINT,则将 g_print_step 置为 true,表示会逐步打印指令执行的过程。

weixin_45041054的博客 826

RecyclerView和ListView原理

转载请注明链接: Android 最后修改版本:2018/8/13-1(0:52) Android ListView RecycleBin 缓存流程 RecyclerView RecyclerView和ListView对比 参考资料 1、RecyclerView和ListView缓存原理 离屏的ItemView即被回收至缓存 入屏的ItemV...

feather(猎羽) 2902

【PyTorch】CNN(一维卷积Conv1D)实现时间序列预测

本文介绍了一维卷积神经网络(Conv1D)在时间序列预测中的应用,展示了其基本原理及实现方式。通过合适的数据预处理和模型调参,Conv1D可以有效地捕捉时间序列数据中的模式,从而进行精准预测。

走向CTO的路上... 1172

代谢组数据分析(五):代谢组的功能富集分析

本文介绍了代谢组数据分析中的功能分析,包括代谢物富集分析、GSEA和ssGSEA方法。文章详细阐述了分析原理、应用背景、数据准备、统计方法以及结果解释,强调了在代谢通路和代谢物ID对应关系建立、差异代谢物筛选、富集程度计算等方面的关键步骤。通过这些方法,可以揭示差异代谢物在生物过程中的作用,为疾病研究和药物开发提供依据。

专注生信领域 5981

RecyclerView 和 ListView对比

布局效果对比布局效果对比 RecyclerView默认支持线性布局,网格布局,瀑布流布局,同时支持横向,纵向滚动。 API ListView 继承重写BaseAdapter类 自定义ViewHolder和convertView一起完成复用工作 RecyclerView 继承重写RecyclerView.Adapter和RecyclerView.ViewHolder 设置布局管理器,设置布局效果 区别 ViewHodler编写规范化 RecyclerView复用item的工作封装好了,不需要Lis

云梦九章~ 9654

C语言设计模式全面解析:从理论到28个实战示例

本文系统介绍了23种经典设计模式在C语言中的实现方法。通过结构体、函数指针等技巧,C语言可以优雅地模拟面向对象特性,实现代码复用与解耦。文章分类详解了创建型、结构型、行为型三大类模式,并提供了28个完整代码示例,包括单例、策略、观察者等核心模式的精简实现。这些模式在嵌入式系统、操作系统内核等场景中广泛应用,如状态机、事件驱动等。学习C语言设计模式的关键在于理解模式意图,掌握函数指针和结构体组合等技巧,并在实际项目中灵活运用。本文为C语言开发者提供了全面的设计模式参考指南。

数字人生 363

【Android面试】Listview和Recyclerview的区别

请你谈谈Listview和Recyclerview的区别Listview和Recyclerview的区别(阿里一面,滴滴一面,被问到)简单比较布局上局部刷新item view的重用ViewHolder嵌套滑动机制空数据处理Listview的二级缓存ActiveViewsScrapViewsRecyclerview的四级缓存RecyclerRecycledViewPoolViewCacheExtension Listview和Recyclerview的区别(阿里一面,滴滴一面,被问到) 简单比较 listvi

Rose J 的博客 5931

CKS-CN考试之路----04

根据上面信息我们知道,这个pod运行在default命名空间下,pod名字为cpu-77cd5ddcbf-bvb8w。可以从/etc/falco/falco_rules.yaml中获得相关内容,大概在文件的460行左右.编辑/etc/falco/falco_rules.local.yaml。7c688a8bfd69即是我们想要获得的docker id。将行为不当 Pod 的 Deployment 缩放为零副本。根据我们刚才定义的rule生成报告。访问/dev/mem 的 Pod。那么如果考试记不住怎么办?

Q先生 601

保姆级教程:ABAP 通过 HTTP POST 调用 OData 服务创建业务数据的具体例子

笔者之前的文章发布之后,有朋友在评论区留言,询问 ABAP 除了 Web Service 之外,是否也支持 HTTP 呢?ABAP 这么强大的语言,支持 HTTP 当然不在话下。网上有很多在 ABAP 系统基于 CL_HTTP_CLIENT 工具类,通过 HTTP 协议和第三方系统交互的代码例子。本文介绍笔者项目中一个实际例子,实现的是在 ABAP 系统 A 通过 HTTP 调用 OData 服务,在 ABAP 系统 B 创建业务数据的需求。下面我们按照这个套路来一步步实现。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 697

Android ListView的上下拉刷新

ListView的上下拉刷新 1丶 MainActivity package com.example.refreshlistview_demo; import java.util.ArrayList; import java.util.List; import com.example.refreshlistview_demo.RefreshListView.OnRe

______夏日飞雨 403

Vue3 - H5实现省市区三四级联动组件,选择地址自定义省市区三级联动插件,弹框式多级联动选择器区域选择,vue3实现省市区三级联动地址选择组件(支持接口数据懒加载,样式精美漂亮,附带详细示例源码)

vue3实现省市区三级联动地址选择组件(附address文件),vue3实现省市区三级联动, 实现省、市、县地区三级联动功能,vue3省市区选择器,VUE3 h5如何实现省市区街道的四级联动选择,vue实现省市区选择联动,vue3城市三级联动(自定义组件)_VUE三级联动,插件省市区联动,vue如何实现省市区选择器,vue3怎样实现省市区地址三级联动,vue四级联动,vue3级联选择器,vue3实现选择省市区镇(街道)四级级联选择,包含三级级联选择,省市区街道三级四级联动选择器,VUE3自定义多列选择器省市

🏆 前端领域优质创作者 3068

ListView和RecyclerView缓存的区别

ListView 1.继承重写BaseAdapter类 2.自定义ViewHolder与ConvertView的优化 布局 单一布局,只可以实现纵向效果 缓存机制 两级缓存 mActiveViews:快速重用屏幕上可见的列表项,不需要重新createView和bindView; mScrapViews:缓存离开屏幕的ItemView,目的是让即将进入屏幕的ItemView重用. ...

qq_42300133的博客 1015

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Recyclerview 刷新

前言:recyclerview比起listview功能上更加丰富外(如横向列表),在Item复用上也更加灵活,比如listview的某个Item数据需要更新,要通过notifyDataSetChanged方法对全部Item进行刷新,而recyclerview则可以精准刷新。 介绍: (1)notifyItemChanged(position) 只刷新该position的Item,即只是该Item调用onBindViewHolder,因此如果对数据源进行插、移除操作不能改方法只刷新操作的Item,毕竟该

yufumatou的博客 4837

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

上一篇: RecyclerView和ListView的异同点
下一篇: Android中Parcelable和Serializable区别
夕夕如盼
博客等级 码龄12年 28粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值