情况如下: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()
中对其进行更新