Firebase Storage下载图像并在getView()中设置适配器

时间:2018-08-28 14:52:17

标签: java android firebase android-arrayadapter firebase-storage

我一直试图在适配器中显示一些搜索结果,这需要我从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;

如何处理此问题,以便每个化身都应带有正确的结果行。谢谢!

0 个答案:

没有答案