Android ListView пытается повторно использовать видимую ячейку после вызова setImageBitmap с асинхронным загруженным растровым изображением
У меня очень странное поведение, когда адаптер ListView предоставляет в метод getView такие же convertViews, даже если все они видны:
getView(); 0; holder: ViewHolder@4289bde8
getView(); 1; holder: ViewHolder@4289bde8
getView(); 4; holder: ViewHolder@4289bde8
getView(); 2; holder: ViewHolder@4289bde8
getView(); 3; holder: ViewHolder@4289bde8
Это происходит только если я вызываю setImageBitmap с асинхронным загруженным изображением. Если этот метод вызывается со статическим растровым изображением (например, растровое изображение из ресурсов) - все работает как задумано:
getView(); 2; holder: ViewHolder@426fd408
getView(); 1; holder: ViewHolder@42899128
getView(); 0; holder: ViewHolder@4289bdf0
getView(); 4; holder: ViewHolder@4289b598
getView(); 5; holder: ViewHolder@4289b480
1 ответ
Это стало большим сюрпризом для меня, но проблема была связана с моей опечаткой, когда я случайно указал android:layout_height="wrap_content"
для ListView. Сразу после того, как я изменил его на правильный android:layout_height="match_parent"
значение, механизм утилизации начал работать правильно даже для асинхронных растровых изображений!