您的位置:首页 > 其它

关于Recyclerview删除item后的数据乱跳问题

2017-05-19 18:36 2556 查看
recyclerview的使用就不多说了简单使用自己看吧,很easy

使用recyclerview,有很多炫酷的效果,比如item的插入,item的删除,item每个条目的加载动画,都可以自己去设置,当然也有默认的动画。

需求逻辑:

recyclerview列表里面有1 , 2,3,4四个item。现在通过点击item3
position =1
)进入详情,在详情里面删除此条目,在返回到recyclerview页面时候,刷新列表(不允许再联网请求数据)。

我比较笨,没有用eventbus这种订阅事件,而是通过:

点击item时候 startactivityForResult同时将点击的item的position也一同传到了详情界面,在详情界面中删除item成功后,先setResult(再次把position返回给recyclerview所在页面),然后再finish详情页。

上面的都不是重点,重点是 如何在onActivityResult方法中刷新Recyclerview的条目,虽然Recyclerview用的也听熟练的,但是,说实话,由于太暴躁,并没有深入了解太多。

今天遇到了这个问题,就是对Recyclerview了解不足所引起的。

言归正传,Recyclerview中也有类似Listview的notifyDataSetChanged方法,但,还增加了很多扩展:



暴躁如我,既然是删除item,肯定就是调用notifyItemRemoved了。

shareListCodeList.remove(position_change);
oa_shareadapter.notifyItemRemoved(position_change);


两行代码改变了世界,机智如你,这种需求简简单单轻轻松松解决了。乍看一下,没有什么问题,就给交工了。结果测试一测,出现了难以解释的问题:



正如上图所示,删除之后的列表显示木有任何的anything问题,But,在点击进入详情的时候,出现了 牛头对马嘴的蒙逼bug,简直是日了哈士奇了。

最后,暴躁的我使用了debug,发现,这个时候,我点击item2,传到详情的position,竟然是2~!!!

然后,我仔细想了想,notifyItemRemoved方法,应该是只是局部ui的刷新,被删除掉的item之后的数据都没有变化,position还是原来的position(即share3的postion还是2),但是通过list.get(2)得到的确是share2.!!

然后,百度之后,果然,需要在此调用一下

int position_delete = data.getIntExtra("position", -1);
OA_JournalList.remove(position_delete);
if(position_change != shareListCodeList.size()){
oa_shareadapter.notifyItemRangeChanged(position_change, shareListCodeList.size() - position_change);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐