2014-10-14 2 views
0

У меня есть список, показывающий строки, содержащие изображения из Интернета.Android - задержка setImage в элементе списка вызывает вызов onMeasure и, следовательно, перерисовку всего из позиции 0

как только строка должна быть нарисована, в Adapter.getView(...), я загружаю изображение в фоновом режиме и устанавливаю его в ImageView в потоке пользовательского интерфейса. Это означает, что битмап устанавливается в ImageView с задержкой.

Я пробовал задержанный setImage ...() с простыми ресурсами, и результат был таким же.

Я заметил, что установка ресурса в задержанном манжере вызывает перерисовку всего списка, начиная с позиции 0, которая даже не отображается - до указанной позиции. Очевидная проблема заключается в том, что прокрутка списка медленная, неустойчивая и негладкая.

Я хочу быть более осторожным здесь: это происходит при прокрутке. Новые увиденные предметы набираются как часть обычного makeAndAddView. Но сразу после этого все строки, ведущие к видимым рядам, раскрашиваются как часть measureHeightOfChildren.

Установка изображения немедленно и без задержки не вызывает вызова onMeasure.

Так как я могу предотвратить перерисовку всего списка и почему поведение отличается от непосредственного setImage и отложенного?

+0

О, и я тестировал его на нескольких версиях устройств Android: 4.1.2, 4.3 и 4.4.4. –

+0

О, посмотри, что я нашел. Я нашел в коде Android код для измерения, начиная с первой видимой позиции, а не из 0. Цитата: '// TODO: после первого макета мы должны начать с первой видимой позиции, а не 0'. Посмотрите сами: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.4.4_r1/android/widget/ListView.java#ListView.onMeasure%28int% 2Cint% 29 –

+0

Во всяком случае, остается вопрос: почему измерение запрашивается в непосредственном сценарии 'setImage', а не в сценарии с задержкой? –

ответ

0

Вопрос о задержке с незапланированным setImage...() остается нерешенным.

Мне удалось предотвратить измерение по сценарию с задержкой, установив layout_height в список match_parent вместо wrap_content.

 Смежные вопросы

  • Нет связанных вопросов^_^