我正在使用回收器视图来显示包含图像网格布局的项目列表。网格布局动态添加到回收器视图适配器上“onBindViewHolder”方法内的列表项。现在的问题是,每次滚动时都会重新创建网格布局视图。我不希望在滚动时重新创建这些视图。怎么处理呢??
这是代码片段
@Override
public void onBindViewHolder(final PersonViewHolder personViewHolder, final int i) {
GridLayout feedGrid = new GridLayout(context);
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(dipToPixels(context,HomePage.SCREEN_WIDTH),dipToPixels(context,HomePage.SCREEN_WIDTH));
feedGrid.setLayoutParams(layoutParams);
feedGrid.setColumnCount(1);
imgArr = new ImageView[num];
imgArr[0] = new ImageView(context);
GridLayout.Spec row = GridLayout.spec(0, 1);
GridLayout.Spec colspan = GridLayout.spec(0, 1);
GridLayout.LayoutParams gridLayoutParam = new GridLayout.LayoutParams(row, colspan);
gridLayoutParam.setGravity(Gravity.FILL);
Picasso.with(context).load(urlArr.get(0)).error(mDrawable).placeholder(mDrawable).into(imgArr[0], new Callback() {
@Override
public void onSuccess() {
personViewHolder.feedGridLayout.setVisibility(View.VISIBLE);
personViewHolder.loadImg.setVisibility(View.GONE);
}
@Override
public void onError() {
personViewHolder.feedGridLayout.setVisibility(View.GONE);
personViewHolder.loadImg.setVisibility(View.VISIBLE);
}
});
feedGrid.addView(imgArr[0], gridLayoutParam);
personViewHolder.feedGridLayout.removeAllViews();
personViewHolder.feedGridLayout.addView(feedGrid);
}
这就是我解决一个非常相似的问题的方法problem https://stackoverflow.com/questions/31164051/recyclerview-with-multiple-dynamic-views-being-inflated-inside-row/31178567.
在您的适配器中,您覆盖 onViewRecycled 并删除 gridLayout 的视图,而不是 onBindViewHolder。
@Override
public void onViewRecycled(PersonViewHolder personViewHolder) {
super.onViewRecycled(personViewHolder);
personViewHolder.feedGridLayout.removeAllViews();
}
Remove personViewHolder.feedGridLayout.removeAllViews();
来自你的 onBindViewHolder。
让我知道是否可以解决问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)