2010-12-02 60 views
1

全部 - 是否有人使用CursorAdapter与图库小部件?有大量的例子显示Gallery和BaseAdapter(Array)作为它的数据存储。Android上的光标适配器和GalleryView

我的用例是从SQLite光标驱动图库。游标具有要显示的ImageURL。

我一直在其他ListView中使用DroidFu的ImageLoader(与一个ImageView)异步下载图像。

但是,这似乎并没有与画廊合作。它(图库)不喜欢处理程序发回它。

因此... 对基于URL的图像使用AsyncDownload的Gallery和Cursor适配器模式的任何想法?

感谢

回答

2

是的,但我用我自己的实现图像加载器,非常类似于DroidFu的(在内存/文件缓存,螺纹和无螺纹图像加载)。看起来你不能通过Gallery +光标适配器设置线程加载图像,否则你会得到一个非常不连贯的滚动,而不是一个连续的平滑滚动。

这里是一个示例代码,我使用相同的游标适配器的列表,画廊和网格视图。

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

你能告诉我什么是“HLBitmapManager” – pengwang 2011-01-05 12:05:18