自定义Adapter中,使用ViewHolder这样的写法应该是绝大多数人的选择,毕竟为了ListView的平滑感考虑。但是,恼人的是,这样的写法会造成listView在滑动中,会出现控件显示错乱的情况。
解决方案:
在else中添加一个方法,使viewholder中的控件状态恢复默认值即可。
public finalclassViewHolder {
private TextView hphmTextView;
private TextView hpzlTextView;
private Button finishButton;
private TextView drakeTextView;
private TextView ligthTextView;
private TextView zcTextView;
private TextView sdTextView;
}
@Override
public View getView(int position, ViewconvertView, ViewGroup parent) {
if (convertView == null) {
viewHolder = new ViewHolder();
convertView= layoutInflater.inflate(
R.layout.activity_lsdjcl_list_item2,null);
viewHolder.hphmTextView = (TextView)convertView
.findViewById(R.id.txt_hphm);
viewHolder.hpzlTextView = (TextView)convertView
.findViewById(R.id.txt_hpzl);
viewHolder.drakeTextView = (TextView)convertView
.findViewById(R.id.brake);
viewHolder.ligthTextView = (TextView)convertView
.findViewById(R.id.light);
viewHolder.zcTextView = (TextView)convertView
.findViewById(R.id.txt_zc_state);
viewHolder.sdTextView = (TextView)convertView
.findViewById(R.id.txt_sd_state);
viewHolder.finishButton = (Button)convertView
.findViewById(R.id.btn_finish);
convertView.setTag(viewHolder);
}else{
viewHolder = (ViewHolder)convertView.getTag();
resetViewHolder(viewHolder);
}
//重新写的方法
private voidresetViewHolder(ViewHolder vh) {
vh.finishButton.setVisibility(View.GONE);
}