使用毕加索加载的图像在滚动时被删除并不断重新加载

Images loaded using Picasso gets removed at scrolling and keeps reloading

我有一个使用 Picasso 从 Firebase 存储中检索的图像列表。图像完美加载。但是每当我滚动时,加载的图像都会被删除并在我向后滚动时重新加载,这对用户的眼睛来说真的很烦人。 我怎样才能解决这个问题,使每个图像只加载一次,即使用户滚动,加载的图像也保持原样。

这是我在 xml 中的 ListView:

<ListView
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:id="@+id/lv"
  android:isScrollContainer="false"
  android:focusable="true"
  android:layout_weight="1"
  android:layout_marginTop="3dp"
  android:scrollingCache="true"
  />

这是列表项中的 ImageView:

<ImageView
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:id="@+id/itemImage"
        android:background="@color/white"
        android:scaleType="fitCenter"
        android:layout_centerVertical="true"
        android:layout_weight="0"
        android:layout_marginTop="5dp"
        android:layout_marginBottom="5dp"
        android:padding="5dp"
        android:src="@drawable/white_filling"
        >
        </ImageView>

这是我的 CustomAdapter:

public class Firebase_CustomAdapter extends BaseAdapter {
public static Context c;
ArrayList<Firebase_Holder> spacecrafts;

public Firebase_CustomAdapter(Context c, ArrayList<Firebase_Holder> spacecrafts) {
    this.c = c;
    this.spacecrafts = spacecrafts;
}

@Override
public int getCount() {
    return spacecrafts.size();
}
@Override
public Object getItem(int position) {
    return spacecrafts.get(position);
}
@Override
public long getItemId(int position) {
    return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {

    if(convertView==null)
    {
        convertView= LayoutInflater.from(c).inflate(R.layout.list_item_books,parent,false);

        ViewHolder viewHolder = new ViewHolder();
        viewHolder.itemImage = (MyImageView) convertView.findViewById(R.id.itemImage);
    }

    final MyImageView itemImage= (MyImageView) convertView.findViewById(R.id.itemImage);

    final Firebase_Holder s= (Firebase_Holder) this.getItem(position);


            StorageReference mStorage = FirebaseStorage.getInstance().getReference();
            final StorageReference Adv_mStorge = mStorage.child("Items_pictures").child(s.getname().toLowerCase() + ".jpg");

                Adv_mStorge.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                    @Override
                    public void onSuccess(Uri uri) {

                        Picasso.with(c).load(uri)
                                .into(itemImage);

                    }
                });

    return convertView;
}


public class ViewHolder {
    MyImageView itemImage;
}

}

我解决了,问题是我用来获取 URL 的监听​​器。我通过直接向 Picasso 提供 URL

解决了这个问题