android – 使用ImageAdapter动态/编程地使用ImageViews填充GridView

我尝试开发一个 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);
        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();

而已.

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...