Recyclerview 刷新「建议收藏」

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

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

前言:recyclerview比起listview功能上更加丰富外(如横向列表),在Item复用上也更加灵活,比如listview的某个Item数据需要更新,要通过notifyDataSetChanged方法对全部Item进行刷新,而recyclerview则可以精准刷新。

介绍:

(1)notifyItemChanged(position)

只刷新该position的Item,即只是该Item调用onBindViewHolder,因此如果对数据源进行插、移除操作不能改方法只刷新操作的Item,毕竟该Item之后的Item的position都发生了改变

(2)notifyItemChanged(int position, Object payload)

对position的Item进行局部刷新,在onBindViewHolder(ContentViewHolder viewHolder, int position, List<Object> payloads)中根据payloads.get(position)值只对需要刷新的控件进行操作

(3)notifyDataSetChanged()

全部Item进行刷新

(4)notifyItemRangeChanged(position, itemCount)

刷新position及之后ItemCount个Item

(5)notifyItemInserted(position)

插入并进行刷新

(6)notifyItemRangeInserted(int position, int itemCount)

从position开始插入itemCount个Item并进行刷新

(7)notifyItemRemoved(int position)

移除并进行刷新

(8)notifyItemRangeRemoved(int position, int itemCount)

从position开始移除itemCount个Item并进行刷新

(9)notifyItemMoved(int fromPosition, int toPosition)

移动并进行刷新

注意:

当对数据源进行移除或添加操作时需要立即执行刷新操作,将adapter内部记录的数据源状态和我们传给adapter的数据源进行同步更新,否则可能会导致RecyclerView报如下异常,同时还没有我们应用异常堆栈信息

java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid view holder adapter positionViewHolder{89b9fcf position=1 id=-1, oldPos=1, pLpos:-1 scrap [attachedScrap] tmpDetached no parent} 
android.support.v7.widget.RecyclerView{d9e5733 VFED..... ......ID 0,0-1080,364 #7f0903a2 app:id/rv_shop_bag_list}, adapter:com.lpf.demo.order.adapter.MyAdapter@5f994d1, 
layout:android.support.v7.widget.LinearLayoutManager@1423b36, context:com.lpf.demo.activity.MainActivity@f8937f9
        at android.support.v7.widget.RecyclerView$Recycler.validateViewHolderForOffsetPosition(RecyclerView.java:5715)
        at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5898)
        at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5858)
        at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5854)
        at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2230)
        at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1557)
        at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1517)
        at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:612)
        at android.support.v7.widget.RecyclerView.dispatchLayoutStep1(RecyclerView.java:3875)
        at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3639)
        at android.support.v7.widget.RecyclerView.consumePendingUpdateOperations(RecyclerView.java:1877)
        at android.support.v7.widget.RecyclerView$1.run(RecyclerView.java:407)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1029)
        at android.view.Choreographer.doCallbacks(Choreographer.java:841)
        at android.view.Choreographer.doFrame(Choreographer.java:769)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1015)
        at android.os.Handler.handleCallback(Handler.java:794)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:176)
        at android.app.ActivityThread.main(ActivityThread.java:6651)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:824)

Jetbrains全家桶1年46,售后保障稳定

这里列举一种导致该异常的例子

错误:
val list = mutableListOf("第1条", "第2条", "第3条", "第4条")
list.removeAt(0)
mAdapter.notifyItemRangeChanged(0, list.size)

正确:
val list = mutableListOf("第1条", "第2条", "第3条", "第4条")
val size = list.size
list.removeAt(0)
mAdapter.notifyItemRangeChanged(0, size)

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/234607.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Jlink或者stlink用于SWD接口下载程序

    Jlink或者stlink用于SWD接口下载程序最近要使用stm32f103c8t6最小系统板,直接ISP串口下载程序太麻烦,就想着使用swd接口来调试。结果:通过SWD接口下载程序成功,但调试失败,还不知原因,会的的人麻烦交流一下。SWD接口:3.3VDIO(数据)CLK(时钟)GND1.首先声明jlink和stlink都有jtag和swd调试功能。jlink接口如下:如图,我使用的就是VCC…

    2022年4月25日
    289
  • GG修改器修改钻石_gg是啥意思

    GG修改器修改钻石_gg是啥意思图就不上了,金钱、钻石和基因等修改,孤单亲测。工具:方法:一.打开GG修改器后选择六号特工二.内存范围:Ca1.钻石修改:进入角色—-选择草帽特工搜索:2500搜索类型:Q全选–修改–更多–增量填1切换下角色你会发现值变了返回搜索找到对应的值修改即可!改成-9999999992.金钱修改:进入关卡打死一个怪后搜索金钱的值搜索类型:Q直接修改即可!改成9999999993.基因修…

    2025年9月2日
    7
  • Effective_STL 学习笔记(十一) 理解自定义分配器的正确用法

    Effective_STL 学习笔记(十一) 理解自定义分配器的正确用法

    2021年6月17日
    92
  • 阿里时间同步服务器地址

    阿里时间同步服务器地址阿里云提供了7个NTP时间服务器也就是Internet时间同步服务器地址ntp1.aliyun.comntp2.aliyun.comntp3.aliyun.comntp4.aliyun.comntp5.aliyun.comntp6.aliyun.comntp7.aliyun.com转载于:https://www.cnblogs.com/glc400/p/8330094.html…

    2022年7月16日
    31
  • jenkins拉取gitlab代码_git强制覆盖远程仓库代码

    jenkins拉取gitlab代码_git强制覆盖远程仓库代码前言python自动化的脚本开发完成后需提交到git代码仓库,接下来就是用Jenkins拉取代码去构建自动化代码了新建项目打开Jenkins新建一个自由风格的项目源码管理Repository

    2022年7月28日
    16
  • peoplesoft笔记「建议收藏」

    peoplesoft笔记「建议收藏」PeopleCode语言结构本主题假定您熟悉一种编程语言,例如C、VisualBasic或Java。在其基础上,PeopleCode语法类似于其他编程语言。但是,PeopleCode语言的某些方面与PeopleTools环境特别相关。例如,定义名称引用使您能够在不使用硬编码字符串文字的情况下引用PeopleTools定义,例如记录定义或页面。其他语言特性,如PeopleCode数据类型和元字符串,反映了PeopleTools和SQL的密切交互。PeopleCode中的

    2025年8月10日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号