2010-12-02 32 views
1

All- Est-ce que quelqu'un a utilisé un CursorAdapter avec un widget Galerie? Il y a beaucoup d'exemples montrant la Gallery et BaseAdapter (Array) comme son magasin de données.Cursor Adapter et GalleryView sur Android

Mon cas d'utilisation entraîne la galerie à partir d'un curseur SQLite. Le curseur a ImageURL à afficher. J'ai utilisé ImageLoader de DroidFu (avec un ImageView) dans d'autres ListViews pour télécharger les images en asynchrone.

Mais cela ne semble pas fonctionner avec la galerie. Il (Galerie) n'aime pas que le gestionnaire y réponde. Avez-vous pensé à un modèle d'adaptateur Gallery et Cursor avec AsyncDownload d'images basées sur une URL?

Merci

Répondre

2

Oui, mais j'ai utilisé ma propre mise en œuvre du chargeur d'image, très similaire à DroidFu (avec en mémoire/mise en cache de fichiers, filetée et le chargement d'images none-thread). Et il semble que vous ne pouvez pas charger l'image par les threads avec la configuration de l'adaptateur Galerie + Curseur, ou bien vous obtenez un défilement très agité, au lieu d'un défilement continu continu.

Voici un exemple de code, j'utilise le même adaptateur de curseur pour les vues de liste, de galerie et de grille.

public class CatalogCursorAdapter extends CursorAdapter { 

private Context context = null; 
private HLBitmapManager iMan; 
private CatalogViewHolder holder; 
private final LayoutInflater inflater; 
private int layout; 

public CatalogCursorAdapter(Context context, Cursor c, int layout) 
{ 
    super(context, c, true); 
    inflater = LayoutInflater.from(context); 
    this.layout = layout; 
    this.context = context; 
    iMan = new HLBitmapManager(context.getCacheDir()); 
} 

@Override 
public View newView(Context context, Cursor cursor, ViewGroup parent) { 
    final View view = inflater.inflate(layout, parent, false); 
      return view; 
} 

@Override 
public void bindView(View v, Context context, Cursor c) { 

    String brandName = c.getString(c.getColumnIndex("display_name")); 
    String category = c.getString(c.getColumnIndex("display_price")); 
    String imgUrl = c.getString(c.getColumnIndex("img_url")); 

    holder = (CatalogViewHolder) v.getTag(); 
    if(holder == null) { 
     holder = new CatalogViewHolder(v); 
     v.setTag(holder); 
    } 

    Bitmap image; 
    switch (this.layout) { 
    case R.layout.catalog_list_row: 
     holder.title.setText(brandName); 
     holder.sub_title.setText(category); 
     iMan.fetchBitmapOnThread(imgUrl, Constants.EVENT_LISTVIEW_IMG_WIDTH, Constants.EVENT_LISTVIEW_IMG_HEIGHT, holder.icon); 
     break; 
    case R.layout.catalog_grid_cell: 
     iMan.fetchBitmapOnThread(imgUrl, Constants.EVENT_LISTVIEW_IMG_WIDTH, Constants.EVENT_LISTVIEW_IMG_HEIGHT, holder.icon); 
     break; 
    case R.layout.catalog_slide_cell: 
     image = iMan.fetchBitmap(imgUrl, Constants.EVENT_LISTVIEW_IMG_WIDTH, Constants.EVENT_LISTVIEW_IMG_HEIGHT); 
     holder.icon.setImageBitmap(image); 
     break; 
    } 
    holder.icon.setScaleType(ImageView.ScaleType.CENTER_INSIDE); 

} 
} 
+0

pouvez-vous me dire quel est le « HLBitmapManager » – pengwang

+0

HLBitmapManager est ma propre implémentation de téléchargeur d'image. vous pouvez le remplacer par tout ce que vous trouvez là-bas qui vous aide à télécharger et gérer votre cache d'image. –