Firebase Storage Загрузите изображения и установите внутри getView () для адаптера - PullRequest
0 голосов
/ 28 августа 2018

Я пытался показать некоторые результаты поиска в моем адаптере, и для этого требуется, чтобы я загружал изображение из 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;

Как можно справиться с этой проблемой, чтобы каждый аватар подходил к нужной строке результатов. Спасибо!

...