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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • vs2010 产品密钥[通俗易懂]

    vs2010 产品密钥[通俗易懂]YCFHQ9DWCYDKV88T2TMHG7BHP转载于:https://www.cnblogs.com/qiwu1314/p/8466855.html

    2022年5月3日
    70
  • 《数据库实验》实验一:建立数据库和基本表结构[通俗易懂]

    《数据库实验》实验一:建立数据库和基本表结构[通俗易懂]数据库实验1教程

    2022年9月24日
    0
  • 单调栈用法_栈函数

    单调栈用法_栈函数单调栈,是指栈内元素从栈底到栈顶单调递增或单调递减的栈。简单来讲,单调栈=单调+栈,它同时满足两个特性:单调性、栈。以单调递增栈来讲解单调栈原理。假设当前元素为x,(1)若x<栈顶元素,那就不满足单调递增性,这时将栈中元素y弹出,若此时条件仍然不满足,则继续弹出栈顶元素,直到满足条件,再将x入栈;(2)若x>=栈顶元素,满足单调递增性,将x入栈;如此不断重复以上步骤,直到所有满足条件的元素都入栈。以一个具体例子[3,5,2,6,8]为例:(1)首先将3入栈,此时栈中元素为[3];(2

    2022年9月22日
    0
  • MapReduce 编程不可怕,一篇文章搞定它

    MapReduce 编程不可怕,一篇文章搞定它前言本文隶属于专栏《1000个问题搞定大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!本专栏目录结构和参考文献请见1000个问题搞定大数据技术体系正文需求:WordCount,大数据领域的HelloWorld。Mapperpackagecom.shockang.study.bigdata.mapreduce;importjava.io.IOException;importorg.apache.hadoop.io.IntWr

    2022年6月14日
    27
  • Java基础篇:Iterator迭代器

    Java基础篇:Iterator迭代器

    2021年10月4日
    40
  • springEL表达式_赋值表达式的条件

    springEL表达式_赋值表达式的条件一、SpEL介绍二、SpEL用法1.在@Value注解中使用2.在XML配置中使用3.在代码中创建Expression对象三、SpEL原理1.解析器:ExpressionParser2.表达式:Expression3.上下文:EvaluationContext使用流程四、表达式语法1.基本表达式①字面量表达式②算数运算表达式③关系运算表达式④逻辑运算表达式⑤字符串连接及截取表达式⑥三目运算⑦Elivis表达式⑧正则表达式2.类相关表达式

    2022年9月11日
    0

发表回复

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

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