Android 适配器不断实例化适配器视图
我一直在学习许多教程,学习如何优化这样的列表,例如图库,但我无法让适配器重新循环视图。 这是我的密码:Android 适配器不断实例化适配器视图,android,adapter,Android,Adapter,我一直在学习许多教程,学习如何优化这样的列表,例如图库,但我无法让适配器重新循环视图。 这是我的密码: @Override public View getView(int position, View convertView, ViewGroup parent) { Log.d("ImageAdapter","getView : "+convertView); ImageView imageView = null; if (convertView == null){
@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不是某种重新循环的视图,这是怎么回事
谢谢你的帮助 我相信你在取景器中使用的循环逻辑是罪魁祸首。当我试图运行你的代码时,应用程序因一个模糊的错误而崩溃。但是,这很好:
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;
}
视图持有者应该避免您重复使用
findviewbyd()
访问行布局中的子视图。由于您的布局只是一个图像视图,因此不需要一个视图支架。我认为您在视图支架中使用的循环逻辑是罪魁祸首。当我试图运行你的代码时,应用程序因一个模糊的错误而崩溃。但是,这很好:
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;
}
视图持有者应该避免您重复使用
findviewbyd()
访问行布局中的子视图。因为您的布局只是一个图像视图,所以不需要视图保持架。首先去掉保持架,在convertView中得到的是从getView()返回的内容。这也是您在代码中所期望的,那么为什么会有如此不必要的复杂性呢
您使用的适配器类是什么?您能否尝试使用BaseAdapter并确保所有重写的方法都返回适当的数据
我考虑的是getItemViewType,如果它每次返回不同的值,则循环将被禁用。首先去掉该持有者,在convertView中得到的是从getView()返回的内容。这也是您在代码中所期望的,那么为什么会有如此不必要的复杂性呢 您使用的适配器类是什么?您能否尝试使用BaseAdapter并确保所有重写的方法都返回适当的数据
我考虑的是getItemViewType,如果它每次返回不同的值,则循环将被禁用。在滚动后是否仍然看到
“getView:null”
?此外,您当前的布局不需要视图保持架。您是否有足够的视图来填充屏幕+?只有当你有足够的空间让某些物体看不见时,它们才会被回收利用(因此可以重复使用)。是的,我有大约13个物体,我的视图足够大,一次可以显示3个。在滚动和滚动之后,我一直得到空值。。。如果你试着用你的电脑,你会得到什么?几次滚动后不再显示null?滚动后是否仍会看到“getView:null”
?此外,您当前的布局不需要视图保持架。您是否有足够的视图来填充屏幕+?只有当你有足够的空间让某些物体看不见时,它们才会被回收利用(因此可以重复使用)。是的,我有大约13个物体,我的视图足够大,一次可以显示3个。在滚动和滚动之后,我一直得到空值。。。如果你试着用你的电脑,你会得到什么?几次滚动后就没有空值了?我刚刚尝试过这个,第一次日志中不断出现空值:/InstanceImageView时,我使用适配器构造函数中给出的上下文,对吗?public ImageAdapter(活动上下文,列表绘图页){Log.d(“ImageAdapter”,“CTOR”);this.context=context;this.plotsImages=plotsImages;mInflater=context.getLayoutInflater();}
,我在第一个日志中不断得到null:/当我实例化ImageView时,我使用适配器构造函数中给出的上下文,对吗?public ImageAdapter(活动上下文,列表绘图页){Log.d(“ImageAdapter”,“CTOR”);this.context=context;this.plotsImages=plotsImages;mInflater=context.getLayoutInflater();}