Android开发经验谈Android开发Android技术知识

Android - RecyclerView系列之添加删除数据的

2018-01-04  本文已影响4965人  Allens_Jiang
老婆保佑,代码无BUG

目录


一:如何实现添加删除数据

在之前的系列文章中,我有一个图片,如下,可以看到,我可以添加数据,先说说如何实现的,再说说坑在哪

插入删除的动画效果

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 不就好了么,那我改成一,然后你瞅瞅

将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);//通知重新绑定某一范围内的的数据与界面 

感谢

RecyclerView关于添加/删除Item的那些坑~~~

上一篇下一篇

猜你喜欢

热点阅读