gpt4 book ai didi

android - 与 RecyclerView 一起使用时 Picasso 图像错位问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:05:22 26 4
gpt4 key购买 nike

在我的应用程序中,我显示了从网络服务获取的文章。这些文章有标题、图片和其他字段。为了显示图像,我使用 Picasso .

问题 - 在滚动 RecyclerView 时,我发现图像错位了。有些项目有重复的图像。我知道 RecyclerView 重用了 xml 项目布局,因此它会产生问题。但我认为必须有一些解决这个问题的办法。我用谷歌搜索了这个并在 stackoverflow 上找到了一些帖子,但这没有帮助。例如-

Picasso loads pictures to the wrong imageview in a list adapter

我尝试了以下但遇到了同样的问题-

public class ArticleAdapter extends RecyclerView.Adapter<ArticleAdapter.ArticleViewHolder> {

protected Activity mActivity;
protected List<Article> mItems = new ArrayList<>();
private static OnEntityClickCallback mCallback;

public ArticleAdapter(Activity pActivity) {
mActivity = pActivity;
}

public void setItemClickCallback(OnEntityClickCallback pCallback) {
this.mCallback = pCallback;
}

@Override
public ArticleViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View articleView = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_article_item, parent, false);
return new ArticleViewHolder(articleView);
}

public void addItem(List<Article> moreItems) {
mItems.addAll(moreItems);
notifyDataSetChanged();
}

public void removeItems(){
mItems.clear();
notifyDataSetChanged();
}


@Override
public void onBindViewHolder(ArticleViewHolder holder, int position) {
holder.bind(mItems.get(position));
}

@Override
public int getItemCount() {
return mItems.size();
}


static class ArticleViewHolder extends RecyclerView.ViewHolder {

private TextView tvTitle;
TextView tvAuthor;
TextView tvPostdate;
ImageView imgImage;
RatingBar ratingBar;

public ArticleViewHolder(View view) {
super(view);
this.tvTitle = (TextView) view.findViewById(R.id.tv_title);
this.tvAuthor = (TextView) view.findViewById(R.id.tv_author);
this.tvPostdate = (TextView) view.findViewById(R.id.tv_date);
this.imgImage = (ImageView) view.findViewById(R.id.img_image);
this.ratingBar = (RatingBar) view.findViewById(R.id.ratingBar);
}

public void bind(final Article article) {

tvTitle.setText(article.getTitle());
tvPostdate.setText(article.getPostdate());
tvAuthor.setText(article.getAuthor());

// Canceling the older request
Picasso.with(imgImage.getContext()).cancelRequest(imgImage);
// Creating a new request.
if (article.getImage() != null) {
Picasso.with(imgImage.getContext()).load(article.getImageUrl())
.placeholder(R.drawable.noimage)
.error(R.drawable.noimage)
.into(imgImage);
}

this.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mCallback != null)
mCallback.onEntitySelected(article);
}
});
}

}
}

更新 - 我的布局文件的一部分

 <ImageView
android:id="@+id/img_image"
android:layout_width="match_parent"
android:layout_height="@dimen/cardview_image_thumbnail_height"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
android:scaleType="centerCrop"
android:layout_margin="@dimen/cardview_padding_btw_widgets"
android:src="@drawable/noimage"
/>

如有任何帮助,我们将不胜感激。谢谢。

最佳答案

外部设置可绘制对象,因为您获得的 ImageView 已经附加了一些可绘制对象。 Imageview 不会重新创建,因此 ImageView 中的上一个图像将可见,直到您将其删除。

    if (article.getImage() != null) {
Picasso.with(imgImage.getContext()).load(article.getImageUrl())
.placeholder(R.drawable.noimage)
.error(R.drawable.noimage)
.into(imgImage);
}else{
// imgImage.setImageDrawable(null);
imgImage.setImageDrawable(R.drawable.some_drawable);
}

关于android - 与 RecyclerView 一起使用时 Picasso 图像错位问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34505882/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com