проверка, все ли виден элемент списка Android (Drawable) - PullRequest
0 голосов
/ 26 сентября 2010

Давайте предположим, что я получил список ImageView и TextView с LinearLayout.Теперь я использую простое расширение ArrayAdapter, которое получает Strig [] [] в качестве элементов, представляющих собой массив из двух строк (каждая запись содержит String [2], где первая строка - это URI для изображения, а вторая - это текст.я переопределяю getView для отображения изображения и текста, конечно, переписывая представления :-).Однако, поскольку загрузка изображений, даже из ресурсов, может быть медленной, я делаю это в асинхронной задаче, это означает, что у меня загружено изображение по умолчанию, и я использую: startLoading (это мой метод), который ставит ImageView и Uri и один разизображение готово, оно помещает его в представление изображения.

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

Поскольку представления перерабатываются, я не могу проверить, виден ли ImageView, так как он может быть виден, но с другим Drawable ...Есть ли способ для меня узнать в какой-то момент, что моя строка недействительна и не видна?Есть ли простой способ или оболочка, мне нужно начать использовать флаги, шаблон тегов и тому подобное, чтобы обнаружить, что моя строка больше не действительна?

1 Ответ

1 голос
/ 26 сентября 2010

То, что я делаю, основано на том, как ListView управляет своими представлениями.

Поскольку существует ограниченный набор представлений, действительно используемых ListView, которые могут быть переданы нашему адаптеру через аргумент convertView в getView(), я реализовал следующее:

  • У меня есть член класса LinkedList, где я храню Uris для загрузки.Эти Uris используются в элементе AsyncTask для получения изображений.
  • Перед возвратом представления элемента в getView () мой адаптер помещает Urin изображения элемента в View.setTag (Object).
  • Когда я повторно использую convertView, перед повторным использованием его содержимого я получаю Uri, с которым он ранее был связан с использованием View.getTag (), и удаляю соответствующий элемент из ожидающего Uris LinkedList.
...