RecyclerView + Glide 在显示时混乱不堪

5
我正在使用recyclerView和Glide实现一个横向画廊,以下是主要代码:
@Override
public void onBindViewHolder(ViewHolder holder, final int position) {
    if (mListener != null) {
        holder.mImageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mListener.onListItemClick(v, position);
            }
        });
    }
    Firmware.VideoModel videoModel = mDataList.get(position);
    String url = videoModel.getPreurl();
    if (position == 0) {
        holder.mImageView.setPadding(mCtx.getResources().getDimensionPixelOffset(R.dimen.activity_horizontal_margin) - mCtx.getResources().getDimensionPixelOffset(R.dimen.image_margin), holder.mImageView.getPaddingTop(), holder.mImageView.getPaddingRight(), holder.mImageView.getPaddingBottom());
    } else if (mDataList != null && position == mDataList.size() - 1) {
        holder.mImageView.setPadding(holder.mImageView.getPaddingLeft(), holder.mImageView.getPaddingTop(), mCtx.getResources().getDimensionPixelOffset(R.dimen.activity_horizontal_margin), holder.mImageView.getPaddingBottom());
    }
    if (mDataList != null && mDataList.size() >= 0) {
        Glide.with(mCtx).load(url).placeholder(R.drawable.image_placeholder).error(R.drawable.image_placeholder).into(holder.mImageView);
        if (videoModel.isVideo()) {
            holder.mImageButton.setVisibility(View.VISIBLE);
        } else {
            holder.mImageButton.setVisibility(View.GONE);
        }
    }
}

我尝试为第一张和最后一张图片设置间距填充,这样就可以像Google Play一样将所有图片滚动到屏幕边缘。

但是很遗憾,这里有一个问题:

由于recyclerView会回收不在可见区域内的视图,所以我设置的填充会在向左或向右滚动recyclerView时混乱。如果位置的视图已被回收,填充将添加到第二个、第三个或任何其他图像上...

我在stackoverflow上查找答案,其中一个解决方法是调用:

holder.setIsRecyclable(false)

这真的可行。但是使用RecyclerView会变得没有意义,所以我希望有人可以帮助我。谢谢。

我在使用Glide时遇到了类似的问题,但我没有更改填充或任何与视图相关的内容。确实很混乱。 - Henrique de Sousa
1个回答

0

你不应该动态地更改 padding,而是应该使用几种不同类型的 ViewHolders(具有不同布局)或自定义 LayoutManager 来满足你的需求。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接