Я пытаюсь разработать приложение для Android, которое позволяет пользователю извлекать данные из flickr и отображать их в виде GridView
(с хорошей 3D-анимацией). После некоторых приключений у меня это почти заработало, но теперь я застрял.
Вот проблема:
Я получил ветку пользовательского интерфейса «LoadPhotosTask», которая получает изображения из flickr, как и приложение с открытым исходным кодом photostream . В методе onProgressUpdate(LoadedPhoto... value)
этого подкласса я называю addPhoto()
. До сих пор все было хорошо - я получил несколько хороших растровых данных и данных Flickr.photo со всей необходимой мне информацией.
@Override
public void onProgressUpdate(LoadedPhoto... value) {
addPhoto(value);
}
С другой стороны, у меня есть GridView
. Теперь я хочу заполнить его фотографиями. У него есть адаптер под названием ImageAdapter
(который расширяет BaseAdapter
, см. Этот учебник ). Если я использую массив внутри класса ImageAdapter
, я могу заполнить GridView
некоторыми образцами изображений. Но если я хочу заполнить его во время выполнения, я не знаю, что делать.
Как мне настроить метод getView в ImageAdapter
? Я пытался заполнить массив внутри класса ImageAdapter
своими значениями в addPhoto
, но он ничего не отображает.
Итак, во-первых, я настраивал массив с количеством фотографий, которые я хотел отобразить в сетке следующим образом (код внутри класса ImageAdapter
):
// class variable
private ImageView[] mThumbIds;
[...]
public void setupArray(int count) {
this.mThumbIds = new ImageView[count];
}
Затем я называю этот метод длиной моего фотолиста:
final Flickr.PhotoList list = params[0];
final int count = list.getCount();
int helper = 0;
imagead.setupArray(count);
После этого я вызываю метод getView вручную внутри метода addPhoto:
private void addPhoto(LoadedPhoto... value) {
ImageView image = (ImageView) mInflater.inflate(
R.layout.grid_item_photo, null);
image.setImageBitmap(value[0].mBitmap);
image.setTag(value[0].mPhoto);
imagead.setmThumbIds(image, value[0].mPosition);
imagead.getView(value[0].mPosition, null, mpicturesGrid);
}
Это метод getView внутри ImageAdapter:
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) { // if it's not recycled, initialize some
// attributes
imageView = new ImageView(mContext);
imageView.setLayoutParams(new GridView.LayoutParams(EDGE_LENGTH,
EDGE_LENGTH));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(0, 0, 0, 0);
imageView.setVisibility(View.VISIBLE);
} else {
imageView = (ImageView) convertView;
}
imageView.setImageDrawable(mThumbIds[position].getDrawable());
imageView.setTag(mThumbIds[position].getTag());
return imageView;
}