在开发的时候,在Android Adapter中请求图片。
但是在执行下面代码的时候,总会出现图片请求多次,而且出现position=0的imageView显示的图片与真正的图片有时候不同。
现象非常诡异。
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
AdapterViewHolder holder = null;
if (convertView == null) {
holder = new AdapterViewHolder();
convertView = mInflater.inflate(R.layout.group_notification_item, null);
holder.tvDescription = (TextView) convertView.findViewById(R.id.tv_group_description);
holder.tvName = (TextView) convertView.findViewById(R.id.tv_group_name);
holder.ivHeadImage = (ImageView) convertView.findViewById(R.id.iv_headimage);
holder.btnAccept = (Button) convertView.findViewById(R.id.accept_btn);
holder.btnDeny = (Button) convertView.findViewById(R.id.deny_btn);
holder.tvTip = (TextView)convertView.findViewById(R.id.tip_text_tv);
convertView.setTag(holder);
} else {
holder = (AdapterViewHolder) convertView.getTag();
}
holder.tvDescription.setText(requester.getMessage());
holder.tvName.setText(requester.getRequesterName());
String imageUrl = requester.getHeadImage();
if (imageUrl != null && !imageUrl.trim().isEmpty()) {
new ImageDownloader(mContext, holder.ivHeadImage).executeOnExecutor(DataRequester.execPool, imageUrl);//异步请求图片
}
return convertView;
}
class AdapterViewHolder {
TextView tvDescription;
TextView tvName;
ImageView ivHeadImage;
Button btnAccept;
Button btnDeny;
TextView tvTip;
}
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<ListView
android:id="@+id/groups_list"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</ListView>
</RelativeLayout>
原因是每次请求完的时候Listview都会重新调整大小去容纳真实的item的尺寸。这样会导致一些item会重新刷新。重新刷新的时候会再次触发请求。
http://stackoverflow.com/questions/11186004/yet-another-getview-called-multiple-times