问题:
使用 class ViewHolder {
public TextViewitemName;
public ImageViewaddBt;
public ImageViewinfo;
publicTextView dateupinfoView;
publicTextView stateLabelView;
publicTextView dateLabel;
publicTextView stateLabel;
public RelativeLayout layoutRe;
}
来提高listview的滑动效率,会引发一些问题,比如位置错乱,提示信息错乱等;原因是内部实现异步加载引起的(欢迎高手指明);
解决方案:
1:使用view的setTag()方法来记录当前item的位置信息;
2:item展示具体值的时候,根据位置信息来取到对应的 model/bean/object,有很多种叫法,你懂的;
if(convertView ==null) {
viewHolder =newViewHolder();
convertView = View.inflate(context, R.layout.m3_activity_indicator_item,null);
viewHolder.addBt= (ImageView) convertView.findViewById(R.id.addBt);
viewHolder.itemName= (TextView) convertView.findViewById(R.id.itemName);
..... .....
convertView.setTag(viewHolder);
viewHolder.info.setTag(position);
viewHolder.addBt.setTag(position);
viewHolder.dateupinfoView.setTag(position);
viewHolder.stateLabelView.setTag(position);
}else{
viewHolder = (ViewHolder)convertView.getTag();
viewHolder.info.setTag(position);
viewHolder.addBt.setTag(position);
viewHolder.dateupinfoView.setTag(position);
viewHolder.stateLabelView.setTag(position);
}
//伪代码
int num=Integer.valueOf(viewHolder.dateupinfoView.getTag()+"");//获取到初始化item时的位置值
Bean item =list.get(num); //list是传递过来的数据源,获取具体的item;
viewHolder.stateLabelView.setText(item.getString("key-Str"))//应该看的懂
这样就可以高效率加载缓存的item,而不会导致位置错乱!