recyclerView
来源:3-8 客户端封装Recycler-2

nurthless
2019-05-28
想问一下,
(1)viewHolder是什么?RecyclerView中每一个item是一个View、ViewHolder、还是一整个的Adapter的某一项?每一个item跟viewHolder是一对一的关系还是复用了,只是改变了内容?
(2)另外,
public void updateData(Data data) {
if (this.callback != null) {
this.callback.update(data, this);
}
}
这个callback为什么不需要赋值、new就能调用?
(3)
recyclerView的缓存策略根据类型存储ViewHolder是什么意思?
2回答
-
同样在这个Adapter中:
112019-05-28 -
Qiujuer
2019-05-28
这个点,相信你查询一下RecyclerView的文档会收获更多。
简单来说我们需要把数据显示到界面上,我们的数据是List<Data>,而界面是List<View>,两者不同,所以我们需要一个Adapter来帮助我们转化数据到界面的显示上。
当然这里就有一个问题了,我们采用最傻的方式,遇到一个Data数据就创建一个View然后丢给父布局显示这是可以的,但是这会带来无限的View增加这会导致内存和CPU消耗,从而卡顿等问题。所以引入了缓存。
缓存缓存缓存,这就需要我们知道什么时候该缓存,什么时候该重用,这是RecyclerView内部的逻辑;而抽象之后就有一个ViewHolder的存在,一个ViewHolder一一对应一个View,缓存一个ViewHolder就等于缓存一个View。
这里为什么不直接缓存View??这是因为缓存还需要保存很多的数据,以及相关的状态,等等;所以给他包裹一层成为ViewHolder这是更好的。
缓存策略可以暴力理解为:一个屏幕只能显示4个图像,当前有5个ViewHolder,当顶部被订出去一个后就被缓存起来,用以底部新的一个;这样就不用重复创建View,只需要给View绑定不同的值就行了。
public void updateData(Data data) {
if (this.callback != null) {
this.callback.update(data, this);
}
}这里不是不需要赋值,而是已经赋值好了,在创建的时候。
这里的Update是把一个Data数据给更新到当前的view上来。
122019-05-28
相似问题