我尝试开发一个
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);
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); imageView.setVisibility(View.VISIBLE); } else { imageView = (ImageView) convertView; } imageView.setImageDrawable(mThumbIds[position].getDrawable()); imageView.setTag(mThumbIds[position].getTag()); return imageView; }
解决方法
你错过了一个关键部分.
使用适配器时,您有一个名为notifyDataSetChanged()的方法.
您缺少的逻辑如下:
为GridView保留创建适配器时,请使用适配器将使用的列表的引用.就像是:
private ArrayList<Photo> mPhotos; private BaseAdapter mAdapter; private GridView mGridView; onCreate: /* other things here */ mAdapter = new MyAdapter(mPhotos); mGridView.setAdapter(mAdapter);
你要添加的照片应该是:
mPhotos.add(photo); mAdapter.notifyDataSetChanged();
而已.