zoukankan      html  css  js  c++  java
  • RecycleView的notifyItemRemoved使用注意

    转载请标明出处,维权必究:https://www.cnblogs.com/tangZH/p/10116095.html

    更多链接:http://77blogs.com/?p=483

    我们为了移除RecycleView的某一项,会用RecycleView的notifyItemRemoved(int position)方法,但是需要注意的是:
    1、用该方法之后并不会刷新Item,也就是说不会重新bind数据,那么position也就没有刷新,每个Item对应的position还是原来的那个,那就会有问题,比如现在只剩下3个Item,而我们点击删除最后一个Item的时候,它的position是原来的position4,那么实际上就是调用RecycleView的notifyItemRemoved(4),就会出现越界。

    那我们该怎么做呢?
    1、删除之后重新:notifyDataSetChanged();,但是这样就没有删除动画。

    2、使用notifyItemRangeChanged(int positionStart, int itemCount)

    这个方法,是通知所有观察者: 从positinStart开始的itemCount这些个item已经改变了,与notifyItemRangeChanged(position, itemCount, null)等价

    positionStart : 是从界面哪个位置的Item开始变化,比如你点击界面上的第二个ItemView positionStart是1
    itemCount : 是已经发生变化的item的个数(包括自己,即正在点击这个),比如,你点击界面上的第二个ItemView,position [1,9] 发生变化,共计9个,因此我们计算是list.size() - position 
    此时使用:
    notifyItemRemoved(position);
    notifyItemRangeChanged(position, mList.size() - position);
     
    注意如果有headView的话还需要将position加上对应的headView数目,比如有一个headView,那么就需要:
    notifyItemRemoved(position + 1);
    notifyItemRangeChanged(position + 1, mList.size() - position);
     

     
  • 相关阅读:
    配置struts2拦截器
    <global-results>标签来定义全局的<result>
    StringUtils.isEmpty和StringUtils.isBlank用法
    Tomcat xxx unbound
    getRequestDispatcher()和response.sendRedirect()
    转 intValue()的用法
    jspf与jsp的区别
    table标签中thead、tbody、tfoot的作用
    hibernate的cascade
    hibernate 持久化对象的三个状态
  • 原文地址:https://www.cnblogs.com/tangZH/p/10116095.html
Copyright © 2011-2022 走看看