延引自:
在异步加载图片的时候:
adapter中重要的代码片段:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Map<String,Object> entity1 = null;
Map<String,Object> entity2 = null;
if (position == 0) {
entity1 = menu_list.get(position);
if (position + 1 < menu_list.size()) entity2 = menu_list.get(position + 1);
} else {
int pos = position*2;
entity1 = menu_list.get(pos);
if (pos+1 < menu_list.size() ) entity2 = menu_list.get(pos+1);
}
final Map<String,Object> entity1_final = entity1;
final Map<String,Object> entity2_final = entity2;
ViewHolder holder;
if (convertView == null ) {
holder = new ViewHolder();
convertView = inflater.inflate(R.layout.correcting_my_collecting_shops_item, null);
holder.icon1 = (ImageView) convertView
.findViewById(R.id.shop_icon1);
holder.icon2 = (ImageView) convertView
.findViewById(R.id.shop_icon2);
holder.name1 = (TextView) convertView
.findViewById(R.id.shop_name1);
holder.name2 = (TextView) convertView
.findViewById(R.id.shop_name2);
holder.position1 = (TextView) convertView
.findViewById(R.id.shop_position1);
holder.position2 = (TextView) convertView
.findViewById(R.id.shop_position2);
holder.second = (LinearLayout) convertView.findViewById(R.id.second);
holder.one = (LinearLayout) convertView.findViewById(R.id.one);
holder.shopNumTitle1 = (TextView) convertView.findViewById(R.id.shop_num_title1);
holder.shopNumTitle2 = (TextView) convertView.findViewById(R.id.shop_num_title2);
<strong>holder.icon1.setImageResource(R.drawable.pic_1x1);
holder.icon2.setImageResource(R.drawable.pic_1x1);</strong>
convertView.setTag(holder);
}else{
holder = (ViewHolder) convertView.getTag();
<strong>holder.icon1.setImageResource(R.drawable.pic_1x1);
holder.icon2.setImageResource(R.drawable.pic_1x1);</strong>
}
if (entity1!=null) {
holder.one.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//Toast.makeText(context, entity1_final.get("per_data").toString(), Toast.LENGTH_SHORT).show();
Intent it = new Intent((Activity)context, C_GoodsDetailActivity.class);
it.putExtra("per_data", entity1_final.get("per_data").toString());
//Log.e("per_dataXXXXXXX", entity1_final.get("per_data").toString());
context.startActivity(it);
}
});
try {
<strong>if (!StringUtil.isEmpty(entity1.get("icon").toString())) {
holder.icon1.setTag(entity1.get("icon").toString());
BitmapManage.getInstance(context).get(entity1.get("icon").toString(), holder.icon1);
}</strong>
else
holder.icon1.setImageResource(0);
DisplayMetrics dm = new DisplayMetrics();
((Activity)context).getWindowManager().getDefaultDisplay().getMetrics(dm);
LinearLayout.LayoutParams llp = new LinearLayout.LayoutParams(dm.widthPixels/2,dm.widthPixels/2);
holder.icon1.setLayoutParams(llp);
} catch (Exception e) {
}
holder.name1.setText(entity1.get("name").toString());
if (context.getClass().getName().equals(PGGMallFoundingActivity.class.getName())){
holder.position1.setVisibility(View.INVISIBLE);
holder.shopNumTitle1.setVisibility(View.INVISIBLE);
} else {
holder.position1.setVisibility(View.VISIBLE);
holder.shopNumTitle1.setVisibility(View.VISIBLE);
}
holder.position1.setText(entity1.get("position").toString());
}
if (entity2!=null) {
holder.second.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//Toast.makeText(context, entity2_final.get("per_data").toString(), Toast.LENGTH_SHORT).show();
Intent it = new Intent((Activity)context, C_GoodsDetailActivity.class);
it.putExtra("per_data", entity2_final.get("per_data").toString());
context.startActivity(it);
}
});
holder.second.setVisibility(View.VISIBLE);
holder.second.setClickable(true);
try {
<strong>if (!StringUtil.isEmpty(entity2.get("icon").toString())) {
holder.icon2.setTag(entity2.get("icon").toString());
BitmapManage.getInstance(context).get(entity2.get("icon").toString(), holder.icon2);
}</strong>
else
holder.icon2.setImageResource(0);
DisplayMetrics dm = new DisplayMetrics();
((Activity)context).getWindowManager().getDefaultDisplay().getMetrics(dm);
LinearLayout.LayoutParams llp = new LinearLayout.LayoutParams(dm.widthPixels/2,dm.widthPixels/2);
holder.icon2.setLayoutParams(llp);
} catch (Exception e) {
}
if ( entity2.get("name")!= null )
holder.name2.setText(entity2.get("name").toString());
if ( entity2.get("position")!= null )
holder.position2.setText(entity2.get("position").toString());
if (context.getClass().getName().equals(PGGMallFoundingActivity.class.getName())){
holder.position2.setVisibility(View.INVISIBLE);
holder.shopNumTitle2.setVisibility(View.INVISIBLE);
} else {
holder.position2.setVisibility(View.VISIBLE);
holder.shopNumTitle2.setVisibility(View.VISIBLE);
}
} else {
holder.second.setVisibility(View.INVISIBLE);
holder.second.setClickable(false);
}
return convertView;
}
class ViewHolder {
ImageView icon1;
ImageView icon2;
TextView name1;
TextView name2;
TextView position1;
TextView position2;
LinearLayout second ;
LinearLayout one;
TextView shopNumTitle1;
TextView shopNumTitle2;
}
在异步加载图片的时候:
if (bitmap != null) {
String key = MD5.getMD5(url) + isScale;
put(key, bitmap);
if (view instanceof ImageView) {
//listview adapter 的错位调换机制
//1.其他地方调用加载位图,肯定没有进行imageView.setTag(), 得到的tag是null时,代表直接加载即可,
//否则就是listview的bitmap加载 ,imageView中的tag 和 当前的url是一致的时候才给加载。
//2.有缓存的话,直接加载缓存的内容,不进行重新加载图片,不会出现这个问题
boolean isListViewCanLoad = ( view.getTag() != null && url.equals(view.getTag()) );
boolean isOtherCanload = view.getTag() == null;
if (isOtherCanload || isListViewCanLoad ) {
((ImageView) view).setImageBitmap(bitmap);
Log.e(view.getTag() + " = " + url);
}
}
else
view.setBackgroundDrawable(new BitmapDrawable(bitmap));
}