Android上的游标适配器和GalleryView

时间:2010-12-02 20:59:16

标签: android cursor gallery

清一色 有没有人使用带有Gallery小部件的CursorAdapter?有很多例子显示Gallery和BaseAdapter(Array)作为其数据存储。

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

我一直在其他ListViews中使用DroidFu的ImageLoader(带有ImageView)来异步下载图像。

但这似乎与Gallery无关。它(图库)不喜欢回复它的处理程序。

所以... 有关基于URL的图像的AsyncDownload的Gallery和Cursor适配器模式的想法吗?

由于

1 个答案:

答案 0 :(得分:2)

是的,但是我使用了我自己的图像加载器实现,非常类似于DroidFu(内存/文件缓存,线程和非线程图像加载)。并且看起来你无法通过具有Gallery + Cursor Adapter设置的线程加载图像,否则你会得到一个非常不连贯的滚动,而不是一个连续的平滑滚动。

下面是一个示例代码,我对列表,图库和网格视图使用相同的游标适配器。

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);

}
}