Курсор Адаптер и ГалереяПросмотреть на Android - PullRequest
1 голос
/ 02 декабря 2010

All - Кто-нибудь использовал CursorAdapter с виджетом Галерея?Существует множество примеров, показывающих Gallery и BaseAdapter (Array) в качестве хранилища данных.

Мой пример использования - это управление Gallery от курсора SQLite.Курсор имеет ImageURL для отображения.

Я использую ImageLoader DroidFu (с ImageView) в других ListViews для асинхронной загрузки изображений.

Но это не похоже на работу с Галереей.Он (Галерея) не любит, когда обработчик отправляет обратно.

Итак ... Есть мысли о шаблоне адаптера Галерея и Курсор с AsyncDownload изображений на основе URL?

Спасибо

1 Ответ

2 голосов
/ 04 января 2011

Да, но я использовал собственную реализацию загрузчика изображений, очень похожую на 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);

}
}
...