我有一个嵌套的RecycleView:
BodyRecycleView的每一项都是一个DetailRecycleView DetailRecycleView的每个项目都是一个元素 DetailRecycleView 中的元素仅在触摸时显示
我考虑节省 BodyRecycleView 创建步骤的时间,因此我跳过在 DetailRecycleView 中创建元素数据集。
onBindViewHolder()
BodyRecycleView 仅使用空数据集创建 DetailRecycleView。 DetailRecycleView 中的元素数据集是在
中创建的getItemCount()
DetailRecycleView。显示没有问题,但是当触摸要交互的元素时,有时会显示错误的元素。
我尝试调试,发现当问题发生时,它不会调用
onCreateViewHolder()
元素有问题。正常情况下,应该这样调用:
onCreateViewHolder()
ViewHolder constructor
onBindViewHolder()
ViewHolder constructor
和
onBindViewHolder()
尚未被调用,因此它显示其他 DetailRecycleView 中的元素; 也许将数据集的初始化放入
getItemCount()
造成这个问题。有什么办法可以让我继续靠近并度过这种情况吗?
进一步调试后,错误的元素是未回收的 ViewHolder,因此我认为先前嵌套的 recycleView 的清除 recycleView 有问题。尝试在我的 DetailRecycle 视图中重写这样的预定义函数看起来可以解决这个问题。
@Override
public void onDetachedFromRecyclerView(@NonNull RecyclerView recyclerView) {
super.onDetachedFromRecyclerView(recyclerView);
Log.d(TAG, "Forcing to clear ViewPool of DetailAdapter " + stock.getName());
recyclerView.getRecycledViewPool().clear();
}