我很长时间都没有理解listviews的不同方面。这是一个问题。我知道一种解决方法,但我想了解它为什么会发生。
它在扩展ArrayAdapter的类的getView方法中。
我有几个listItems,每个我都有一个图像。对于一些listItems,右边有一个信息图像。为此我添加了一个触发alertdialog的监听器。 让我们说该应用程序在15个列表项目中共有2个信息图片。到目前为止一切都很好。但是 - 如果我向下滚动然后滚动upp - 现在所有其他列表项都填充了此信息图像。尽管每个视图使用了一个imageHolder,为什么会发生这种情况呢?
public View getView(int position, View convertView, ViewGroup parent) {
final ViewGroup theParent = parent;
final int thePosition = position;
View view = null;
ViewHolder holder;
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.main, parent, false);
holder = new ViewHolder();
holder.textView = (TextView) view.findViewById(R.id.label);
holder.imageView = (ImageView) view.findViewById(R.id.icon);
holder.infoView = (ImageView) view.findViewById(R.id.imageIcon);
view.setTag(holder);
}
else {
view = convertView;
holder = (ViewHolder) view.getTag();
}
holder.textView.setText(values[position]);
switch (thePosition) {
case 0:
holder.imageView.setImageResource(R.drawable.conv);
break;
case 1:
holder.imageView.setImageResource(R.drawable.counting);
break;
case 2:
holder.imageView.setImageResource(R.drawable.travelling);
break;
case 3:
holder.imageView.setImageResource(R.drawable.love);
break;
case 4:
holder.imageView.setImageResource(R.drawable.dating);
holder.infoView.setImageResource(R.drawable.info);
break;
case 5:
holder.imageView.setImageResource(R.drawable.restaurant);
holder.infoView.setImageResource(R.drawable.info);
break;
case 6:
holder.imageView.setImageResource(R.drawable.thaidishes);
break;
case 7:
holder.imageView.setImageResource(R.drawable.time_);
break;
case 8:
holder.imageView.setImageResource(R.drawable.time2);
break;
case 9:
holder.imageView.setImageResource(R.drawable.colours);
break;
case 10:
holder.imageView.setImageResource(R.drawable.weather);
break;
case 11:
holder.imageView.setImageResource(R.drawable.directions);
break;
case 12:
holder.imageView.setImageResource(R.drawable.emergency);
break;
case 13:
holder.imageView.setImageResource(R.drawable.cities);
break;
}
return view;
}
我之前有过与checbox-items类似的问题。滚动视图时,未选中已选中的项目。我通过在arraylist中将checked item作为布尔值存储来解决这个问题。 对此有类似的解决方案吗?
我提到的解决方法就是将imageResourse设置为零(0)。
答案 0 :(得分:1)
getView方法返回的视图将被回收,以最大限度地减少资源使用。如果您的某个包含正确信息图片的视图被回收,它仍然会存在。
这是按预期工作的。正如您已经发现的那样,解决方法是使用setImageResource(0)或setVisibility(View.GONE)或类似的方法重置正确信息图像的状态。
这也适用于复选框状态等。