gpt4 book ai didi

java - 回收者 View 混合了其元素的内容

转载 作者:行者123 更新时间:2023-12-01 16:30:44 26 4
gpt4 key购买 nike

我正在使用回收器 View 来加载组织发布的帖子列表。我使用 firestore 作为后端。为了加载图像,我首先从存储引用中获取下载 Url,然后使用 Glide 将图像加载到 ImageView 中。我面临的问题是,由于对存储引用的调用是异步调用,因此当它从服务器获取下载 uri 时,OnBindviewHolder 中适配器的位置已经更改,因此图像会混淆。

我提供了 OnBindViewHolder 代码和获取下载网址的方法

@Override
public void onBindViewHolder(@NonNull final studentFavouriteUniversityPosts.MyViewHolder holder, int position) {

if(postsList.get(holder.getAdapterPosition()).getImageUrl()!=null &&
!postsList.get(holder.getAdapterPosition()).getImageUrl().isEmpty()){

holder.setPostImage(holder.getAdapterPosition());
}







}

public void setPostImage(int position) {

postImage.setVisibility(View.VISIBLE);
placeholder.placeholder(R.color.white);
//Getting the download uri from the Fire store storage and displaying it using glide.
storageReference.child(postsList.get(position).getImageUrl())
.getDownloadUrl()
.addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
// Log.d("URI",uri.toString());
Glide.with(context).applyDefaultRequestOptions(placeholder).load(uri).into(postImage);

}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.d("ERROR","err loading image file");
}
});
}




你们谁能帮我解决这个问题吗?

编辑

我稍微改变了结构。因此,我不是在适配器中运行存储引用任务,而是将下载 URL 存储在对象中。因此setPostImage方法只有Glide部分。

所以方法看起来像这样

public void setPostImage(String downloadURL) {
postImage.setVisibility(View.VISIBLE);
Glide.with(context).applyDefaultRequestOptions(placeholder).load(downloadURL).into(postImage);
}

我仍然遇到这个问题。不知道怎么解决

最佳答案

First get the list of urls from firestore from the activity or fragment where you are 
setting the adapter

1. public void getImages() { storageReference.child("the child name")
.getDownloadUrl()
.addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
// Log.d("URI",uri.toString());
adapter.imagesRetrieved();
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.d("ERROR","err loading image file");
}
});

}

2. Then inside on success listener pass the group of values to the adapter method from the success listener and define the method inside the adapter
public void imagesRetreived() {
notifyDataChanged(images);
}

private void notifyDataChanged(Images images) {
this.images = images;
notifydatasetchanged(); //this one is recycler view inbuilt method
}

关于java - 回收者 View 混合了其元素的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62047572/

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