RecyclerView.Adapter notifyItemRemoved postion错位的问题
来源:互联网 发布:知圆链条索具 编辑:程序博客网 时间:2024/06/07 14:15
问题:
在adapter的onBindViewHolder中设置了如下监听事件:
myViewHolder.operationView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mOperationClickListener.onItemClick(myViewHolder.operationView,position); }});
上面是一个item中的操作选项,当操作删除item后调用下面的移除操作
mPlans.remove(postion);mAdapter.notifyItemRemoved(postion);发现这个postion之后的item监听数据错乱。
原因是移除之后,没有重新刷新onBindViewHolder,导致监听的postion还是之前的。
解决:
在移动动画之后,重新刷新onBindViewHolder,使用notifyItemRangeChanged方法
mPlans.remove(postion);mAdapter.notifyItemRemoved(postion);mAdapter.notifyItemRangeChanged(postion,mPlans.size()-postion);
附:
notifyItemChanged(int position),position数据发生了改变,那调用这个方法,就会回调对应position的onBindViewHolder()方法了,当然,因为ViewHolder是复用的,所以如果position在当前屏幕以外,也就不会回调了,因为没有意义,下次position滚动会当前屏幕以内的时候同样会调用onBindViewHolder()方法刷新数据了。其他的方法也是同样的道理。
public final void notifyItemRangeChanged(int positionStart, int itemCount),顾名思义,可以刷新从positionStart开始itemCount数量的item了(这里的刷新指回调onBindViewHolder()方法)。
public final void notifyItemInserted(int position),这个方法是在第position位置被插入了一条数据的时候可以使用这个方法刷新,注意这个方法调用后会有插入的动画,这个动画可以使用默认的,也可以自己定义。
public final void notifyItemMoved(int fromPosition, int toPosition),这个方法是从fromPosition移动到toPosition为止的时候可以使用这个方法刷新
public final void notifyItemRangeInserted(int positionStart, int itemCount),显然是批量添加。
public final void notifyItemRemoved(int position),第position个被删除的时候刷新,同样会有动画。
public final void notifyItemRangeRemoved(int positionStart, int itemCount),批量删除。
参考:http://www.cnblogs.com/tiantianbyconan/p/4232560.html
- RecyclerView.Adapter notifyItemRemoved postion错位的问题
- RecyclerView的notifyItemRemoved()方法删除条目问题
- RecyclerView notifyItemRemoved 的坑
- 解决RecycleView Adapter使用notifyItemRemoved造成Position混乱的问题。
- RecyclerView里notifyItemRemoved的坑
- RecyclerView里notifyItemRemoved的坑
- RecyclerView里notifyItemRemoved的坑
- RecyclerView里notifyItemRemoved的坑
- RecyclerView.Adapter关于notifyItemInserted等数据错位问题
- RecyclerView关于notifyItemRemoved的那点小事
- RecyclerView关于notifyItemRemoved的那点小事!
- RecyclerView关于notifyItemRemoved的那点小事
- 关于Adapter调用notifyItemRemoved后数组越界和数据错乱的问题
- recyclerview notifyItemRemoved报错
- RecyclerView使用notifyItemRemoved错乱
- RecyclerView 中adapter.notifyDataSetChanged()无效的问题
- RecyclerView如何使用正确notifyItemRemoved
- recyclerView.notifyItemRemoved数据索引混乱
- JavaSE关键语句
- PHP网站开发指引
- JAVA学习笔记
- 有关iOS中数据的存储&读取
- Android M6.0指纹框架概要
- RecyclerView.Adapter notifyItemRemoved postion错位的问题
- UVA-10340 All in All
- UVA 455 Periodic String
- Java解析xml文档之SAX解析
- iOS中的图片轮播器
- Spark+Python+Pycharm在Windows下的配置
- [LeetCode] 10. Regular Expression Matching
- 最短路径Dijkstra算法的C语言实现
- 【数据结构与算法分析】线性表