RecyclerView 适配器更新的那些坑

希望大家能够看完这篇文章,千万不要被我前面的戏说给误导。

需求:
我的需求是這样的,其中有个别ViewHolder是唯一的,只有在数据更新时才要求刷新View。

2016.12.07的戏说如下:

今天遇到一个奇葩问题。

状况:需求是這样的,数据优先读取缓存,读完执行

Adapter.notifyDataSetChanged();

之后再获取网络数据。

数据获取成功之后还会继续执行

Adapter.notifyDataSetChanged();。

燃尔:

奇怪的事情发生了。

界面莫名少显示了一个item。

目前解决方案:

网络刷新的时候延迟500毫秒,基本不出现此怪现象了。


真正的罪魁祸首原形毕现:

2016.12.26 更新

原来在onCreateViewHolder方法执行之后如果没有复用的ViewHolder时则会重新new 一个ViewHolder。

由于我在onBindViewHolder方法里面作了数据未更新不执行更新的方法。

就导致刚new的ViewHolder没有初始化。

如果碰巧之前的ViewHolder没有被回收就不会出现数据没更新的情况。

解决方案:

1.在onCreateViewHolder添加判断,如果是唯一的ViewHolder就标记需要执行执行更新操作。

2.然在onBindViewHolder方法执行更新

其他:

不知道有没有一样遇到的相似怪状的伙伴。

不知道你们怎么解决的呢?

你可能感兴趣的:(RecyclerView 适配器更新的那些坑)