适配器不断实现AdapterView

时间:2012-10-30 16:35:41

标签: android adapter

我一直在关注如何优化这样的列表作为图库的许多教程,但我无法让我的适配器重新循环视图。 这是我的代码:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    Log.d("ImageAdapter","getView : "+convertView);
    ImageView imageView = null;

    if (convertView == null){
        //imageView = (ImageView) mInflater.inflate(R.layout.pic_adapter, null);
        imageView = new ImageView(context);


        holder = new ViewHolder();
        holder.imageView = imageView;

        imageView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
        //imageView = holder.imageView;
    }

    holder.imageView.setImageDrawable(plotsImages.get(position));
    Log.d("ImageAdapter","return : "+imageView);
    return imageView;
}

在我的日志中,我在getView的开头一直得到“null”,这意味着convertView不是一些重新循环的视图,那是怎么回事?

谢谢你的帮助!

2 个答案:

答案 0 :(得分:1)

我相信你在ViewHolder中使用的循环逻辑是罪魁祸首。当我尝试运行您的代码时,应用程序崩溃时出现了一个模糊的错误。但是这很好用:

public View getView(int position, View convertView, ViewGroup parent) {
    Log.d("ImageAdapter","getView : "+convertView);
    ImageView imageView = null;

    if (convertView == null){
        //imageView = (ImageView) mInflater.inflate(R.layout.pic_adapter, null);
        imageView = new ImageView(Example.this);
    } else {
        imageView = (ImageView) convertView;
    }

    imageView.setImageDrawable(plotsImages.get(position));
    Log.d("ImageAdapter","return : "+imageView);
    return imageView;
}

ViewHolders应该可以避免重复使用findViewById()来访问行布局中的子视图。由于您的布局只是一个ImageView,因此不需要ViewHolder。

答案 1 :(得分:0)

首先摆脱持有者,你在convertView中获得的是你从getView()返回的内容。这也是你对代码的期望,为什么会出现这种不必要的复杂性呢?

您使用的适配器类是什么?您可以尝试使用BaseAdapter并确保所有重写的方法都返回适当的数据吗?

我正在考虑使用getItemViewType,如果每次都返回不同的值,则会禁用回收。