目录
- 一:如何实现添加删除数据
- 二: 解决方案(从下标0位置开始添加)
- 三:添加数据后,下表错位问题
一:如何实现添加删除数据
在之前的系列文章中,我有一个图片,如下,可以看到,我可以添加数据,先说说如何实现的,再说说坑在哪
1. 在适配器中添加
mData 是我的数据源,当我添加数据的时候,调用 addData,传入我想添加数据的位置即可,删除同样的有原理,第一个坑,就是 注意看 我是使用
notifyItemInserted
刷新数据的
public void addData(int position) {
mData.add(position, "Insert One");
notifyItemInserted(position);
}
public void removeData(int position) {
mData.remove(position);
notifyItemRemoved(position);
}
2. 代码实现
然后代码如下,就可以和上面的效果图一样了,
myAdapter.removeData(1);
myAdapter.addData(1);
这时候就有小伙伴说了,直接将1改成0 不就好了么,那我改成一,然后你瞅瞅
坑!!!
不知道,小伙伴们发现没,删除一切正常,但是,添加的时候,RecyclerView,并没有看到动画效果,下拉一点,可以看到,数据确实添加了,就是没有将添加在0 位置的数据显示出来
二: 解决方案
当你添加完数据,刷新以后
myAdapter.addData(0);
mRecyclerView.scrollToPosition(0);
先看看效果,
完美解觉,那刚刚哪行代码什么意思呢,我英文不好,就不放源码上的解释了,大概的意思,把列表移动到顶端0 的位置
三:添加数据后,下表错位问题
当我们点击之前写的单项点击事件
注意看,我添加了两个新的数据,下表应该是 0 ,1, 2, 3.。。这样才对
但是变成了 0,0,0,1,我们添加的两条数据,明显不对嘛
添加数据没问题了,为什么了单项点击有问题了
看一眼我们之前添加数据的逻辑
public void addData(int position) {
mData.add(position, "Insert One");
notifyItemInserted(position);
}
我们当时使用的是notifyItemInserted
,为了能看到我们的动画效果睦南道不是这个??
查阅了资料,发现,确实有问题
解决方案
正确打开方式
//添加数据
public void addItem(int position, Object data) {
mDatas.add(position, data);
notifyItemInserted(position);//通知演示插入动画
notifyItemRangeChanged(position,mDatas.size()-position);//通知数据与界面重新绑定
}
使用notifyItemRangeChanged 从新让数据与界面绑定,瞅瞅效果
补充
notifyDataSetChanged();//通知重新绑定所有数据与界面
notifyItemChanged(int);//通知重新绑定某一个Item的数据与界面
notifyItemRangeChanged(int, int);//通知重新绑定某一范围内的的数据与界面