Imageloader, listview.notifyDataSetChanged刷新問題,圖片閃爍


轉載請註明出處: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;
	}



下面我做出了修改,如果當前圖片是之前的圖片,則不會調用ImageLoader,否則調用ImageLoader。



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方法來,判定當前圖片是否是之前的,如果是之前,則不會刷新圖片,如果不是,再刷新。



發佈了102 篇原創文章 · 獲贊 244 · 訪問量 74萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章