android.widget.GridView中setAdapter(ListAdapter adapter)中,对于ListAdapter 中的public View getView(int position, View convertView, ViewGroup parent) 有如下处理以复用View
View row = convertView;
ViewHolder holder;
if (row == null) {
LayoutInflater inflater = mContext.getLayoutInflater();
row = inflater.inflate(R.layout.item, null);
holder = new ViewHolder();
holder.mImage = (ImageView) row.findViewById(R.id.img);
row.setTag(holder);
} else {
holder = (ViewHolder) row.getTag();
}
在设置图像的具体的内容的时候,有条件判断如下:
if (mList.get(position) != null) {
holder.mImage.setImageDrawable(xxxx);
} else {
holder.mImage.setBackgroundResource(R.drawable.bg);
}
在实际显示的过程中,出现了位置0的图片样式显示到了位置8的上面,查询问题的初期脑子短路,以为是数据重复的原因导致。后来在想起来定位显示上复用的处理。
此问题的原因在于:
位置0的view在位置8被复用,而设置图片的时候,在分支处理的时候有的是设置图片内容的本身,有的却是设置图片的背景,在已经设置过图片内容的情况下又没有清理的话,则会出现所谓的数据重复。