情况如下:RecyclerView项目 View 具有复杂的布局。

在某种程度上,我以这种方式修改了RecyclerView项的布局:

例如itemView内部修改后的View的索引= 3;

for (int i=0; i < mRecyclerView.getChildCount(); i++) {

    ViewGroup itemView = ((ViewGroup) mRecyclerView.getChildAt(i));

    itemView.getChildAt(3).getLayoutParams().width = newWidth;
    itemView.getChildAt(3).requestLayout();
}

一切都按预期工作,但是当我滚动RecyclerView时,将以旧宽度显示2-3个可回收项目 View 。现在,我试图找到如何从RecycledViewPool或更好的解决方案中删除这些 View 的方法:也要修改它们的宽度,但是我找不到找到这些 View 的方法。

我尝试了mRecyclerView.getRecycledViewPool().clear(),但旧的 View 不断出现。

最佳答案

为了防止RecyclerView缓存分离的 View 而不是回收的 View ,请使用:

mRecyclerView.setItemViewCacheSize(0)

另一种更为激进的方法是为您希望缓存的项目调用notifyDataSetChanged()notifyItemChanged()-这将迫使它们被回收,并且您可以在onBindViewHolder()中对其进行更新

10-07 19:44
查看更多