RecyclerView关于添加/删除Item的那些坑~~~
来源:互联网 发布:java zip压缩并加密 编辑:程序博客网 时间:2024/05/22 05:14
近来在做一个Android项目,用到了RecyclerView。相比ListView单调的notifydatasetchanged,RecyclerView在添加/删除Item时有多种方法可以选择。
例如:添加Item可以用notifyItemInserted和notifyItemRangeInserted,删除Item可以用notifyItemRemoved和notifyItemRangeRemoved。这些通知方法都自带酷炫的动画,只需一行代码就能打造远比ListView华丽的界面。
但需要注意的是,这些带有动画效果的方法仅仅是起到界面动画的效果,实际上并没有进行数据与界面的重新绑定。通过打log可以发现,动画播放前后,onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position)中的position形参是没有改变的。但实际上由于添加/删除Item的影响,被点击的Item(假如这个Item是列表中靠后的)的position值应该添加1或减少1。
所以说RecyclerView这些动画效果方法在本质上并不能等价于ListView的notifydatasetchanged方法。正确地添加/删除Item的步骤应该为先调用动画方法,再通知Adapter重新绑定数据与界面。用添加Item举例:
//添加数据public void addItem(int position, Object data) {mDatas.add(position, data);notifyItemInserted(position);//通知演示插入动画notifyItemRangeChanged(position,mDatas.size()-position);//通知数据与界面重新绑定}其实通过观察方法名字可以看出来,无论是notifyItemInserted还是notifyItemRemoved的方法名中,都没有“Changed”这个单词。所有notify开头的方法中,仅仅只有以下三个方法带有“Changed”单词且具有重新绑定数据与界面的功能:
notifyDataSetChanged();//通知重新绑定所有数据与界面notifyItemChanged(int);//通知重新绑定某一个Item的数据与界面notifyItemRangeChanged(int, int);//通知重新绑定某一范围内的的数据与界面
20 0
- RecyclerView关于添加/删除Item的那些坑~~~
- RecyclerView 获取item,删除item的坑
- 关于Recyclerview删除item后的数据乱跳问题
- Android-RecyclerView实现Item添加和删除
- TV中RecyclerView添加item的点击事件和删除item之后获取焦点解决
- 添加或删除RecyclerView的item后 刷新Adapter中的数据源的个数
- RecyclerView的添加点击item的监听器
- RecyclerView 动画 (添加、删除动画 以及 加载item 时的动画)
- Android-UI布局---RecyclerView学习(六)item添加删除展现的动画效果
- 一个能一句话添加header和Footer,并且能滑动删除和交换Item的RecyclerView
- RecyclerView的item左滑删除
- 为RecyclerView添加item的点击事件
- 为RecyclerView添加item的点击事件
- RecyclerView之添加不同的item布局
- 为RecyclerView添加item的点击事件
- 为RecyclerView添加item的点击事件
- 为RecyclerView添加item的点击事件
- 为RecyclerView添加item的点击事件
- java之spring框架初识
- 最小生成树(Prim算法)
- php 通过curl上传文件
- UVA
- 水仙花
- RecyclerView关于添加/删除Item的那些坑~~~
- linux笔记-磁盘管理
- 快速简单理解i2c标准协议
- Android之获取控件的宽高和手机屏幕的宽高
- 本地测试环境搭建(二)
- 【计算机网络】网络编程---TCP套接字(一)
- 洛谷 1355_神秘大三角_计算几何
- 毕业论文参考文献 Master's thesis references
- 算子优化 filter + coalesce