2017-10-24 4 views
1

Picassoを使用してFirebase Storageから取得した画像のリストがあります。画像は完全に読み込まれます。しかし、私がスクロールするたびに、読み込まれたイメージが取り除かれ、スクロールバックすると、ユーザーの目には本当に面倒です。 どのようにすべての画像が一度だけ読み込まれ、読み込まれた画像はユーザがスクロールしてもそのままになるように解決できます。ピカソを使用して読み込まれた画像は、スクロール時に削除され、読み込みを再開します。

これは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" 
    /> 

これはListItemの内部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; 
} 

} 
+0

ユニバーサル画像ローダーを試してみてください。 https://github.com/nostra13/Android-Universal-Image-Loader – theapache64

答えて

0

私は、それを解決問題は、私がURLを取得しようとしていたリスナーだということでした。ピカソに直接URLを提供して解決しました。

関連する問題