轉載請註明出處:http://blog.csdn.net/harryweasley/article/details/49678739
我在項目中,用了ImageLoader來顯示圖片,這樣引出一個問題,偶爾在我調用notifyDataSetChanged這個方法時候,圖片全部閃爍一下,原因是圖片全部重新加載了一次,導致閃爍。
下面是我之前的getView方法中。下面的ImageLoader直接調用,造成每次notifyDataSetChanged,重新調用了ImageLoader方法。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = LayoutInflater.from(context).inflate(R.layout.item_app_wall2, parent, false);
holder = new ViewHolder();
holder.icon = (ImageView) convertView.findViewById(R.id.app_icon);
holder.name = (MarqueeText) convertView.findViewById(R.id.app_name);
// holder.grade = (ImageView)
// convertView.findViewById(R.id.grade);
holder.size = (TextView) convertView.findViewById(R.id.app_size);
holder.count = (TextView) convertView.findViewById(R.id.app_count);
holder.ratingBar = (RatingBar) convertView.findViewById(R.id.grade);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
ImageLoader.getInstance().displayImage(searchAppList.get(position).getHttpIco(), holder.icon,
DisplayImageOptionUtil.getInstance().getOptions());
holder.name.setText(searchAppList.get(position).getName().trim());
holder.size.setText(CommonUtil.format(searchAppList.get(position).getApkSize() / (float) 1024) + "M");
AppStatistics statistics = searchAppList.get(position).getAppStatistics();
if (statistics != null) {
holder.count.setText(statistics.getDownloadCount() + "次");
}
holder.ratingBar.setRating(searchAppList.get(position).getAveccore() / 2f);
return convertView;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = LayoutInflater.from(context).inflate(R.layout.item_app_wall2, parent, false);
holder = new ViewHolder();
holder.icon = (ImageView) convertView.findViewById(R.id.app_icon);
holder.name = (MarqueeText) convertView.findViewById(R.id.app_name);
// holder.grade = (ImageView)
// convertView.findViewById(R.id.grade);
holder.size = (TextView) convertView.findViewById(R.id.app_size);
holder.count = (TextView) convertView.findViewById(R.id.app_count);
holder.ratingBar = (RatingBar) convertView.findViewById(R.id.grade);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
if (searchAppList.get(position).getHttpIco().equals(holder.icon.getTag())) {
} else {
// 如果不相同,就加載。現在在這裏來改變閃爍的情況
ImageLoader.getInstance().displayImage(searchAppList.get(position).getHttpIco(), holder.icon,
DisplayImageOptionUtil.getInstance().getOptions());
holder.icon.setTag(searchAppList.get(position).getHttpIco());
}
holder.name.setText(searchAppList.get(position).getName().trim());
holder.size.setText(CommonUtil.format(searchAppList.get(position).getApkSize() / (float)1024) + "M");
AppStatistics statistics = searchAppList.get(position).getAppStatistics();
if (statistics != null) {
holder.count.setText(statistics.getDownloadCount() + "次");
}
holder.ratingBar.setRating(searchAppList.get(position).getAveccore() / 2f);
return convertView;
}
通過ImageView.getTag和setTag方法來,判定當前圖片是否是之前的,如果是之前,則不會刷新圖片,如果不是,再刷新。