希望大家能够看完这篇文章,千万不要被我前面的戏说给误导。
需求:
我的需求是這样的,其中有个别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方法执行更新
其他:
不知道有没有一样遇到的相似怪状的伙伴。
不知道你们怎么解决的呢?