2016-04-07 4 views
0

У меня есть ListView, который имеет нечетный визуальный глюк при прокрутке:ListView прокрутки UI глюк

during scroll

После прокрутки:

after scroll

Это происходит периодически, и у меня нет хороший способ воспроизвести это, кроме закрытия моего приложения, и начать прокрутку списка. Любые идеи о том, что происходит?

Вот некоторые (возможно) соответствующий код из моего arrayAdapter я использую для этого ListView:

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    // If we weren't given a view, inflate one 
    ViewHolder holder; 
    if (convertView == null) { 
     convertView = ((Activity) context).getLayoutInflater().inflate(R.layout.event, 
       parent, false); 
     holder = new ViewHolder(); 
     holder.name = (TextView) convertView.findViewById(R.id.eventName); 
     holder.date = (TextView) convertView.findViewById(R.id.eventDate); 
     holder.attending = (TextView) convertView.findViewById(R.id.eventAttending); 
     holder.bgImg = (ImageView) convertView.findViewById(R.id.eventsImg); 
     holder.gpsIcon = (ImageView) convertView.findViewById(R.id.iconGPS); 
     convertView.setTag(holder); 
    } else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 
    // Configure the view for this event 
    final Event event = getItem(position); 
    holder.gpsIcon.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Util.openMap(getContext(), event.getAddress()); 
     } 
    }); 
    holder.name.setText(event.getName()); 
    holder.date.setText(Util.convertDashesToDate(event.getDate())); 
    holder.attending.setText(event.getAttending()); 
    RequestUtil.getImageFullUrl(getContext(), event.getImage_url(), holder.bgImg, 10, 0); 

    return convertView; 
} 

@Override 
public Event getItem(int position) { 
    return new Event(events.get(position)); 
} 

static class ViewHolder { 
    TextView name; 
    TextView date; 
    TextView attending; 
    ImageView bgImg; 
    ImageView gpsIcon; 
} 

Пикассо код для получения изображения:

public static void getImageFullUrl(final Context context, String url, ImageView imgView, int radius, int margin) { 
    instance = appSingleton.getInstance(context); 
    instance.getPicasso() 
      .load(url) 
      .fit() 
      .centerCrop() 
      .tag("Request") 
      .transform(new RoundedTransformation((int) Util.convertPixelsToDp(radius, context), 
        (int) Util.convertPixelsToDp(margin, context))) // TODO Reuse RoundedTransform 
      .into(imgView); 
} 
+0

Геттер не должен создавать объекты. – Blackbelt

+0

Почему? Это предотвращает утечку памяти. – Jonfor

ответ

0

Я предполагаю, что ваш код, устанавливает изображение:

RequestUtil.getImageFullUrl(getContext(), event.getImage_url(), holder.bgImg, 10, 0); 

загружает (загружает) изображение в потоке пользовательского интерфейса, вызывая блок нить.

Я не знаю, что стоит за вашим RequestUtil, но я бы предложил использовать одну из нескольких хороших библиотек для загрузки изображений для Android, таких как Picasso. Например, Picasso будет обрабатывать загрузку изображения в фоновом потоке для вас.

+0

Я использую Пикассо. – Jonfor