Trong ứng dụng của tôi, tôi đang hiển thị các bài viết đang được tìm nạp từ một dịch vụ web. Những bài viết có tiêu đề, hình ảnh và các lĩnh vực khác. Để hiển thị hình ảnh, tôi đang sử dụng Picasso.Vấn đề đặt sai hình ảnh Picasso khi sử dụng với RecyclerView
Sự cố - Trong khi cuộn RecyclerView, tôi thấy các hình ảnh bị đặt sai chỗ. Một số mục có hình ảnh trùng lặp. Tôi biết nó là RecyclerView mà reuses bố trí mục xml và do đó nó đang tạo ra một vấn đề. Nhưng tôi nghĩ rằng phải có một số giải pháp cho vấn đề này. Tôi đã googled về điều này và tìm thấy một số bài viết trên stackoverflow nhưng điều đó đã không giúp đỡ. Đối với example-
Picasso loads pictures to the wrong imageview in a list adapter
Tôi đã thử những điều sau đây nhưng có cùng một vấn đề-
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);
}
});
}
}
}
Update - Một phần của file layout của tôi
<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"
/>
Bất kỳ trợ giúp sẽ được đánh giá cao . Cảm ơn bạn.
Chỉ những hình ảnh đã bị thất lạc hoặc các văn bản cũng? – Soham
@Soham Chỉ những hình ảnh bị thất lạc. –
Bạn có thể vui lòng đăng lớp bộ điều hợp của mình không. – Soham