Я пытался показать некоторые результаты поиска в моем адаптере, и для этого требуется, чтобы я загружал изображение из Firebase Storage для каждой строки результатов (например, аватар). Поскольку все функции загрузки для Firebase являются асинхронными, они устанавливают аватар в том порядке, в котором они были загружены, а не в порядке списка результатов. Это приводит к тому, что мои пользователи имеют разные аватары. Это мой код:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// Get the data item for this position
Trip eachTrip = getItem(position);
// Check if an existing view is being reused, otherwise inflate the view
final ViewHolder viewHolder; // view lookup cache stored in tag
final View result;
if (convertView == null) {
viewHolder = new ViewHolder();
LayoutInflater inflater = LayoutInflater.from(getContext());
convertView = inflater.inflate(R.layout.search_result_row, parent, false);
viewHolder.avatar = (RoundedImageView) convertView.findViewById(R.id.avatar);
viewHolder.firstName = (TextView) convertView.findViewById(R.id.first_name);
viewHolder.originalPlace = (TextView) convertView.findViewById(R.id.originalPlace);
viewHolder.destination = (TextView) convertView.findViewById(R.id.destination);
viewHolder.timeAndDate = (TextView) convertView.findViewById(R.id.timeAndDate);
viewHolder.seatsAvailable = (TextView) convertView.findViewById(R.id.seats_available);
result=convertView;
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
result=convertView;
}
if(!eachTrip.userFirstName.equals("")){
viewHolder.firstName.setText(eachTrip.userFirstName);
}
else {
viewHolder.firstName.setText("Водитель без имени");
}
viewHolder.originalPlace.setText(eachTrip.originalPlace);
viewHolder.destination.setText(eachTrip.destination);
viewHolder.timeAndDate.setText(eachTrip.day + "/" + eachTrip.month + "/" + eachTrip.year + " " + eachTrip.hour + ":" + eachTrip.minute);
viewHolder.seatsAvailable.setText("Количество мест: " + eachTrip.numberOfSeatsAvailable);
storageHelper = new FirebaseStorageHelper(eachTrip.driverUID);
storageHelper.downloadAvatar(new FirebaseStorageHelper.DownloadCallback() {
@Override
public void onCallback(Uri uri) {
Picasso.get().load(uri).into(viewHolder.avatar);
}
});
// Return the completed view to render on screen
convertView.setOnClickListener(this);
return convertView;
Как можно справиться с этой проблемой, чтобы каждый аватар подходил к нужной строке результатов. Спасибо!