Jul*_*els 6 android gridview flickr dynamic adapter
我尝试开发一个Android应用程序,允许用户从flickr获取数据并在一个GridView很好的3D动画中显示它.经过一些冒险之后我几乎跑了,但现在我被卡住了.
这是问题所在:
我有一个UI线程"LoadPhotosTask",它从flickr获取图片,就像开源应用程序photostream一样.在onProgressUpdate(LoadedPhoto... value)我调用的那个子类的方法中addPhoto().到目前为止,每个人都很好 - 我得到了一些不错的Bitmap和Flickr.photo数据以及我需要的所有信息.
@Override
public void onProgressUpdate(LoadedPhoto... value) {
addPhoto(value);
}
Run Code Online (Sandbox Code Playgroud)
另一方面,我有一个GridView.现在我想填写照片.它有一个调用的适配器ImageAdapter(扩展BaseAdapter,请参阅本教程).如果我在ImageAdapter类中使用数组,我可以填充GridView一些示例图像.但是如果我想在运行时填充它,我不知道该怎么做.
我如何在ImageAdapter?中设置getView方法?我试图ImageAdapter用我的值填充类中的数组addPhoto,但它没有显示任何内容.
首先,我设置了数组,其中我希望在网格中显示的照片数量(代码在ImageAdapter类中):
// class variable
private ImageView[] mThumbIds;
[...]
public void setupArray(int count) {
this.mThumbIds = new ImageView[count];
}
Run Code Online (Sandbox Code Playgroud)
然后我用我的光刻胶的长度调用这个方法:
final Flickr.PhotoList list = params[0];
final int count = list.getCount();
int helper = 0;
imagead.setupArray(count);
Run Code Online (Sandbox Code Playgroud)
然后我在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);
}
Run Code Online (Sandbox Code Playgroud)
这是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;
}
Run Code Online (Sandbox Code Playgroud)
你错过了一个关键部分.
当你使用一个Adapter名为notifyDataSetChanged()的方法时.您缺少的逻辑如下:
使用适配器将使用的列表的引用创建Adapterfor for GridViewstay时.就像是:
private ArrayList<Photo> mPhotos;
private BaseAdapter mAdapter;
private GridView mGridView;
onCreate:
/* other things here */
mAdapter = new MyAdapter(mPhotos);
mGridView.setAdapter(mAdapter);
Run Code Online (Sandbox Code Playgroud)
你要添加的照片应该是:
mPhotos.add(photo);
mAdapter.notifyDataSetChanged();
Run Code Online (Sandbox Code Playgroud)
而已.
| 归档时间: |
|
| 查看次数: |
22045 次 |
| 最近记录: |