Я программирую такое приложение, как Tinder. В своей деятельности я инициализирую массив, содержащий все возможные совпадения. И затем в моем адаптере я использовал для загрузки изображения профиля от пользователя в ImageView с glide.with (context) .load (url) .into (ImageView), это также работает отлично, однако мой onClickListener в моем адаптере не работает. Очевидно, проблема в том, что основной поток «заморожен», потому что у него слишком много работы для загрузки изображений в режиме просмотра изображений.
Из-за этого я реализовал AsyncTask, где я загружаю изображение в фоновом режиме и в onPostExecute я загружаю его в ImageView. Это также работает, однако, когда я проводил 4/5 пользователей, внезапно изображение от другого пользователя отображается для неправильного пользователя, и если я подожду несколько секунд, ImageView каким-то образом «обновится» и появится правильный ImageView.
Я понятия не имею, почему у меня такое поведение, и я подумал, что, возможно, загрузка изображений с растровым изображением слишком медленная, и если бы я мог загрузить изображение из Интернета в фоновом режиме и загрузить его с помощью glide в 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);
}
}
}