Я использую UIL для загрузки изображений с URL-адреса в Gridview, но проблема в том, что изображения и элементы дублируются или загружаются на многие неправильные позиции.Дублирующие элементы в неправильном положении в GridView
Элемент, который находится на полпути от экрана, дублируется.
это GridView адаптер:
public class GridViewAdapter extends BaseAdapter {
private Activity _activity;
private ArrayList<Object_Wallpaper> wallpapersList;
private ImageLoader mImageLoader;
GridViewAdapter adapter;
ViewHolder holder;
Object_Wallpaper wall;
public GridViewAdapter(Activity activity, ArrayList<Object_Wallpaper> wallpapersList,
int imageWidth) {
this._activity = activity;
this.wallpapersList = new ArrayList<Object_Wallpaper>();
this.wallpapersList = wallpapersList;
this.adapter = this;
this.mImageLoader = ImageLoader.getInstance();
}
@Override
public int getCount() {
return this.wallpapersList.size();
}
@Override
public Object getItem(int position) {
return wallpapersList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
/*private view holder class*/
private class ViewHolder {
ImageView smallThumb;
ProgressBar pb;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
holder = new ViewHolder();
if (convertView == null) {
LayoutInflater inflater = _activity.getLayoutInflater();
convertView = inflater.inflate(R.layout.grid_item_photo, null);
holder.smallThumb = (ImageView) convertView.findViewById(R.id.imgThumbnail);
holder.pb = (ProgressBar) convertView.findViewById(R.id.progressBar1);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
wall = wallpapersList.get(position);
showImage(position);
return convertView;
}
private void showImage(final int position){
if(!wall.isDownloaded){
mImageLoader.displayImage(wall.smallURL, holder.smallThumb, null,
new ImageLoadingListener() {
@Override
public void onLoadingStarted(String imageUri, View view) {
holder.pb.setVisibility(View.VISIBLE);
}
@Override
public void onLoadingFailed(String imageUri, View view,
FailReason failReason) {
holder.pb.setVisibility(View.GONE);
}
@Override
public void onLoadingComplete(String imageUri,
View view, Bitmap loadedImage) {
holder.pb.setVisibility(View.GONE);
wall.isDownloaded = true;
wallpapersList.set(position, wall);
}
@Override
public void onLoadingCancelled(String imageUri, View view) {
}
}, new ImageLoadingProgressListener(){
@Override
public void onProgressUpdate(String imageUri, View view,
int current, int total) {
holder.pb.setProgress(Math.round(100.0f * current/total));
}
});
} else {
mImageLoader.displayImage(wall.smallURL, holder.smallThumb);
holder.pb.setVisibility(View.GONE);
}
}
}
И это объект:
public class Object_Wallpaper implements Serializable {
private static final long serialVersionUID = 1L;
public String id,title,tags,fullResURL, thumbURL, smallURL;
public boolean isDownloaded;
public Object_Wallpaper(String id, String title, String tags,
String fullResURL, String thumbURL, String smallURL) {
this.id = id;
this.title = title;
this.tags = tags;
this.fullResURL = fullResURL;
this.thumbURL = thumbURL;
this.smallURL = smallURL;
this.isDownloaded = false;
}
}
вы можете мне сказать, что вещи я сделал неправильно до сих пор, пожалуйста? Благодарю. Я видел такие же вопросы в другом месте, но они тоже не помогли.
EDIT:
я понял, что это происходит только в быстрой прокрутки. что мне делать?
Nope это кажется, как это работает, только если я не прокручиваюсь, когда я прокручиваю вниз, он показывает элементы заряжали, на неправильных позициях, он даже показывает ранее загруженные изображения на слотах, еще не загружены –
Правильно, это звучит так, как я предупреждал, с переработанными видами. Вы посмотрели ответ в ссылке, которую я разместил? Вы можете использовать карту (называемую ivMap в моем другом ответе), поддерживать ее внутри getView и ссылаться на нее, когда заканчивается загрузчик изображений. – Bruce
да, но смотрите здесь: wallpapersList.set (позиция, стена); У меня уже есть что-то подобное, он делает то же самое, это не помогает. –