我的Recycler视图和StaggeredGrid有问题,它将宽度减少了2。 我用Picasso将图像加载到项目中,当我第一次加载图像时,它们在回收器视图中被奇怪地处理掉了。 重装后,一切似乎都很好。
我认为问题来自图像加载:StaggeredGrid第一次不知道图像高度,但是因为缓存而重新加载后知道。
我该如何解决这个问题?
答案 0 :(得分:1)
我想你已回答了自己的问题。在将数据添加到回收站之前,您需要加载图像/确定它们的尺寸。
答案 1 :(得分:0)
通过将差距策略改为:
解决StaggeredGridLayoutManager manager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
manager.setGapStrategy(StaggeredGridLayoutManager.GAP_HANDLING_MOVE_ITEMS_BETWEEN_SPANS);
recyclerView.setLayoutManager(manager);
自动更改项目的位置
答案 2 :(得分:0)
这是因为当您向上和向下滚动时,持有者无法识别图像视图的宽度和高度。当您向下滚动时它会清除上部视图,反之亦然。
像这样使用:
@Override
public void onBindViewHolder(ViewHolder viewHolder, int position) {
MyViewHolder vh = (MyViewHolder) viewHolder;
ImageModel item = imageModels.get(position);
RelativeLayout.LayoutParams rlp = (RelativeLayout.LayoutParams)vh.imageView.getLayoutParams();
float ratio = item.getHeight() / item.getWidth();
rlp.height = (int) (rlp.width * ratio);
vh.imageView.setLayoutParams(rlp);
vh.positionTextView.setText("pos: " + position);
vh.imageView.setRatio(item.getRatio());
Picasso.with(mContext).load(item.getUrl()).placeholder(PlaceHolderDrawableHelper.getBackgroundDrawable(position)).into(vh.imageView);
}
要清楚,请参阅此链接:Picasso/Glide-RecyclerView-StaggeredGridLayoutManager