我一直在关注如何优化这样的列表作为图库的许多教程,但我无法让我的适配器重新循环视图。 这是我的代码:
@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不是一些重新循环的视图,那是怎么回事?
谢谢你的帮助!
答案 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,如果每次都返回不同的值,则会禁用回收。