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


相关推荐

  • ManualResetEvent的理解和使用[通俗易懂]

    ManualResetEvent的理解和使用[通俗易懂]classProgram{staticvoidMain(string[]args){//注意:ManualResetEvent可以对所有进行等待的线程进行统一控制//true-初始状态为发出信号;false-初始状态为未发出信号ManualResetEventm…

    2022年7月18日
    15
  • 安全帽子识别

    安全帽子识别https://www.jianshu.com/p/55bd49c22cf4

    2022年5月20日
    40
  • 关于mysql的时区(下):如何设置mysql的时区

    关于mysql的时区(下):如何设置mysql的时区一、如何设置mysql时区1、命令1)查时区:showvariableslike’%time_zone%’返回有2行记录,要看time_zone变量的值,不需要看system_time_zone。若值为SYSTEM表示取值跟system_time_zone保持一致。system_time_zone的值是启动mysql服务的时候读取了操作系统的值,除非重新启动mysql服务重读否则这个值不变2)设置会话时区:settime_zone=’+8:00’仅对当前会话有效,在当前窗口立即生效

    2025年6月15日
    2
  • 常见期望和方差_泊松分布的期望推导

    常见期望和方差_泊松分布的期望推导展开全部数学期望是分布区间e68a8462616964757a686964616f31333431343065左右两端和的平均值,方差为分布区间左右两端差值平方的十二分之一。均匀分布是经常遇到的一种分布,其主要特点是:测量值在某一范围中各处出现的机会一样,即均匀一致。故又称为矩形分布或等概率分布。均匀分布的期望:均匀分布的期望是取值区间[a,b]的中点(a+b)/2,也符合我们直观上的感受。均匀分…

    2022年9月18日
    2
  • vue 分页 Pagination

    vue 分页 Pagination<el-pagination@size-change=”handleSizeChange”@current-change=”handleCurrentChange” :current-page.sync=”paging.currentPage”:page-sizes=”paging.pageSizes” :page-size=”paging.pageSize”layout=”total,prev,pager,next,jumper” :total=”paging.total”.

    2022年10月1日
    3
  • vs2010旗舰版可用密钥

    vs2010旗舰版可用密钥YCFHQ9DWCYDKV88T2TMHG7BHP

    2022年5月3日
    70

发表回复

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

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