問題:
使用 class ViewHolder {
public TextViewitemName;
public ImageViewaddBt;
public ImageViewinfo;
publicTextView dateupinfoView;
publicTextView stateLabelView;
publicTextView dateLabel;
publicTextView stateLabel;
public RelativeLayout layoutRe;
}
來提高listview的滑動效率匪蟀,會引發(fā)一些問題榛做,比如位置錯亂刨秆,提示信息錯亂等;原因是內(nèi)部實現(xiàn)異步加載引起的(歡迎高手指明)辫诅;
解決方案:
1:使用view的setTag()方法來記錄當前item的位置信息;
2:item展示具體值的時候材义,根據(jù)位置信息來取到對應(yīng)的 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是傳遞過來的數(shù)據(jù)源,獲取具體的item;
viewHolder.stateLabelView.setText(item.getString("key-Str"))//應(yīng)該看的懂
這樣就可以高效率加載緩存的item,而不會導致位置錯亂嗅定! ?