天天看点

RecyclerView的notifyDataSetChanged

  相信RecycleView很多人都不陌生,每次拿到数据后,都会调用Adapter的notifyDataSetChanged实现UI更新,但事实上notifyDataSetChanged使用的时候也是存在些问题的,就像小哥遇到的一个问题:利用notifyDataSetChanged(position)实现局部更新数据,但是就好像出现了UI更新延时的问题,查了一些文档,https://blog.csdn.net/lyankj/article/details/53738398,发现这位小哥也遇到这样的问题,也给出了解决方法,利用notifyDataSetChanged(position,payload),将payload参数设置为0传入就可以避免UI更新出现延时。

  但问题来了,这是为什么?payload起到了什么作用?https://www.jianshu.com/p/de8601f357a9这位小哥讲得就很不错,当我们调用notifyDataSetChanged(position)的时候,其实adapter会去调用onCreateViewHolder和onBindViewHolder的,而调用notifyDataSetChanged(position,payload)的时候,adapter只会调用onBindViewHolder的,因此我们看到,后者避免了视图的重新创建,提高渲染效率,同时还可以通过判断onBindViewHolder传过来的payLoad,来单独更新某些UI,真正实现局部刷新。看来后面还是要多花时间看看RecyclerView呀