【发布时间】:2011-06-09 23:04:07
【问题描述】:
我尝试开发一个 Android 应用程序,它允许用户从 flickr 获取数据并将其显示在 GridView 中(带有一些不错的 3D 动画)。经过一些冒险后,我几乎可以运行它,但现在我被卡住了。
问题来了:
我有一个 UI 线程“LoadPhotosTask”,它从 flickr 获取图片,就像开源应用程序 photostream。在该子类的方法onProgressUpdate(LoadedPhoto... value) 中,我调用addPhoto()。到目前为止一切都很好 - 我得到了一些不错的 Bitmap 和 Flickr.photo 数据以及我需要的所有信息。
@Override
public void onProgressUpdate(LoadedPhoto... value) {
addPhoto(value);
}
另一方面,我有一个GridView。现在我想用照片填充它。它有一个名为ImageAdapter 的适配器(它扩展了BaseAdapter,参见tutorial)。如果我在ImageAdapter 类中使用一个数组,我可以用一些示例图像填充GridView。但是如果我想在运行时填充它,我不知道该怎么做。
我必须如何在ImageAdapter 中设置getView 方法?我试图用我在addPhoto 中的值填充ImageAdapter 类中的数组,但它没有显示任何内容。
所以首先我设置了数组,其中包含我想在网格中显示的照片数量(代码在 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);
之后我在 addPhoto 方法中手动调用 getView 方法:
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);
}
也就是ImageAdapter里面的getView方法:
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;
}
【问题讨论】:
标签: android gridview dynamic adapter flickr