Android ListView смешивает изображения при загрузке через Интернет - PullRequest
0 голосов
/ 10 февраля 2011

У меня есть приложение, которое содержит несколько списков.Списки просмотра содержат элементы, которые состоят из изображений и текстовых представлений.

Все изображения имеют миниатюрные размеры на сервере, и шаблон, используемый для их загрузки, выглядит следующим образом:

  • Создание экземпляра DrawableManager
  • в методе getView я делаю следующее 1) Передача большого пальца uri и экземпляра ImageView методу drawablemanagers метод getImageAsync 1.2) Метод сначала просматривает SD-карту, если образ существует, если это так, загрузите его с SD-карты и сохранитеsoftreference + обновляемая графика просмотра изображений 1.2) Если не существует на SD.Извлеките из HTTP и сохраните на SD (если места достаточно), поместите как мягкую ссылку и обновите изображение для просмотра.

Когда изображения существуют на SD-карте, все работает нормально.Но в первый раз (или при использовании приложения без SD-карты) изображения, похоже, заполняются в неправильных строках списка при прокрутке.Когда я прекращаю прокрутку, проблема решается самостоятельно через пару секунд.

Это почти как если бы ссылки на ImageView были объединены или что-то в этом роде.

Есть идеи?

Я тожевключите метод getView:

public View getView(int position, View convertView, ViewGroup parent) {
                    ViewHolder vh;
                    if (convertView == null) {
                        convertView = inflater.inflate(R.layout.informationrow, null);
                        vh = new ViewHolder();
                        vh.imageView = (ImageView) convertView.findViewById(R.id.rowInformationIcon);
                        vh.textView = (TextView) convertView.findViewById(R.id.rowInformationTitleLine);
                        convertView.setTag(vh);
                    }
                    else
                    {
                        vh = (ViewHolder) convertView.getTag();
                    }

                    CustomCategory cc = items.get(position);
                    if (cc != null) {
                        vh.textView.setText(cc.get_name());
                        if (cc.getMediaUrl() != null) {
                            _drawMgr.fetchDrawableOnThread(cc.getMediaUrl(), vh.imageView);
                            vh.imageView.setBackgroundDrawable(getResources().getDrawable(R.drawable.imageframe));
                        }
                        else {
                            vh.imageView.setImageDrawable(getResources().getDrawable(R.drawable.trans4040));
                            vh.imageView.setBackgroundDrawable(null);
                        }
                    }

                    return convertView;
            }

Спасибо!

1 Ответ

0 голосов
/ 08 марта 2011

Я прочитал что-то, что говорит, что вам всегда нужно устанавливать что-то в каждом представлении в списке, даже если оно пустое.Поэтому, возможно, если вы добавите

vh.imageView.setImageDrawable(null);

до

_drawMgr.fetchDrawableOnThread(cc.getMediaUrl(), vh.imageView);

, это может решить вашу проблему.Просто предположение.

...