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

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




  • 21
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值