对于自定义Adapter中,使用ViewHolder这样的写法应该是绝大多数人的选择,毕竟为了ListView的平滑感考虑。但是,恼人的是,这样的写法会造成listView在滑动中,会出现控件显示错乱的情况。
我的解决方案是这样的,在else中添加一个方法,使viewholder中的控件状态恢复默认值即可。
1 final ViewHolder viewHolder; 2 if (convertView == null) { 3 4 ... 5 6 convertView.setTag(viewHolder); 7 } else { 8 viewHolder = (ViewHolder) convertView.getTag(); 9 resetViewHolder(viewHolder); 10 } 11 12 ...
1 private void resetViewHolder(ViewHolder vh) { 2 vh.btn_play.setVisibility(View.GONE); 3 vh.iv_avatar.setVisibility(View.GONE); 4 }