我一直试图在适配器中显示一些搜索结果,这需要我从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;
如何处理此问题,以便每个化身都应带有正确的结果行。谢谢!