在什么情况下 RecyclerView 的缓存机制会失效?即本该被回收的表项没能回收,无法回收就无法复用,这对列表的性能会有多大影响?从一个实例出发,探究下答案。
这篇 Demo 效果如下:
列表表项是一个 TextView,它在做水平位移动画。
这种场景下,当表项滑出屏幕后会被回收吗?
监听表项回收
RecyclerView.Adapter提供了两个监听表项回收状态的回调:
public class RecyclerView
public abstract static class Adapter<VH extends ViewHolder> {
// 表项回收失败
public boolean onFailedToRecycleView(@NonNull VH holder) {
return false;
}
// 表项回收成功
public void onViewRecycled(@NonNull VH holder) {
}
}
}
复制代码
在自定义 Adapter 中重载这两个方法,再把事件通过 lambda 传递出去:
class VarietyAdapter : RecyclerView.Adapter<ViewHolder>() {
// lambda
var onFailedToRecycleView: ((holder: ViewHolder) -> Boolean)? = null
var onViewRecycled: ((holder: ViewHolder) -> Unit)? = null
// 重写
override fun onFailedToRecycleView(holder: ViewHolder): Boolean {
return onFailedToRecycleView?.invoke(holder) ?: return super.onFailedToRecycleView(holder)
}
// 重写
override fun onViewRecycled(holder: ViewHolder) {
onViewRecycled?.invoke(holder)
}

最低0.47元/天 解锁文章
1541

被折叠的 条评论
为什么被折叠?



