我正在编写Tinder之类的应用。在我的活动中,我初始化了一个包含所有可能匹配项的arraylist。然后,在我的适配器中,我曾经使用glide.with(context).load(url).into(ImageView)从ImageView中的用户中加载配置文件图像,这也可以很好地工作,但是适配器中的onClickListener无法正常工作。显然问题在于主线程是“冻结的”,因为他的工作量很大,无法将图像加载到图像视图中。 因此,我实现了一个AsyncTask,在其中我在后台下载了图像,并在onPostExecute中将其加载到了ImageView中。这也可行,但是当我刷4/5个用户时,突然为错误的用户显示了另一个用户的图像,如果我等了几秒钟,ImageView就会以某种方式“更新”并显示正确的ImageView。
我不知道为什么会有这种行为,我认为也许用位图加载图像太慢了,如果我可以在后台从Web上下载图像并在onPostExecute中滑行加载它,是否可以工作?如果有人有想法,我将不胜感激!
private List<cards> listItems;
private Context context;
public arrayAdapter(List<cards> listItems ,Context context){
this.listItems = listItems;
this.context = context;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item, viewGroup, false);
return new ViewHolder(v);
}
@SuppressLint("SetTextI18n")
@Override
public void onBindViewHolder(@NonNull final ViewHolder viewHolder, int i) {
final cards currentItem = listItems.get(i);
viewHolder.name.setText(currentItem.getName());
viewHolder.comment.setText(currentItem.getComment());
Picasso.get().load(currentItem.getProfileImageUrl()).into(viewHolder.image);
viewHolder.image.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(!currentItem.getProfileImageUrl2().equals("default")){
Picasso.get().load(currentItem.getProfileImageUrl2()).into(viewHolder.image);
}
}
});
}
@Override
public int getItemCount() {
return listItems.size();
}
public class ViewHolder extends RecyclerView.ViewHolder{
TextView name, comment;
public ImageView image;
private CardView card;
private String imageUrl;
ViewHolder(@NonNull View itemView) {
super(itemView);
name = (TextView) itemView.findViewById(R.id.name);
image = (ImageView) itemView.findViewById(R.id.image);
comment = (TextView) itemView.findViewById(R.id.commentText);
card = (CardView) itemView.findViewById(R.id.card);
}
}
}
答案 0 :(得分:0)
您可以只使用Picasso库,而不必使用AsyncTasks,而是提供所需的图像url和imageView即可。
Picasso.get()。load(“ http://i.imgur.com/DvpvklR.png”)。into(imageView);
有关详细信息,请点击此处