Реализация Android-просмотрщика

Я понимаю идею и использование шаблона Viewholder, но у меня все еще есть один вопрос:
Предположим, у нас есть один TextView в окне просмотра и 10 элементов для отображения ("item0, item1....").
Если я вызову findViewById один раз, как я понимаю, я иметь один объект этого TextView. Итак, при первом вызове getView я расширяю представление, нахожу ссылку и устанавливаю текст "item0".
При втором вызове я получаю тот же TextView и устанавливаю текст "item1" в тот же TextView.
Почему элемент 0 текст не меняется?
Есть ли клонирование в фоновом режиме?


person NickF    schedule 20.10.2014    source источник


Ответы (2)


Is there any cloning in the background?

Android предварительно выделяет количество представлений, достаточное для заполнения экрана устройства, на котором вы запускаете приложение (пул представлений), идентичные с точки зрения содержимого, но разные с точки зрения эталона.

person Blackbelt    schedule 20.10.2014

Предполагая, что вы реализуете свой ViewHolder внутри класса адаптера и используете держатель в методе getView(), единственное, что можно сказать наверняка, это то, что TextView в вашем случае описывает слот родительской структуры (например, ListView). После того, как вы определили слот в xml, который раздувается из вашего адаптера, нет никакого клонирования или чего-то подобного.
Согласно Документация Google идея держателя описана так:

Ваш код может часто вызывать findViewById() во время прокрутки ListView, что может снизить производительность. Даже когда адаптер возвращает увеличенный вид для повторного использования, вам все равно нужно искать элементы и обновлять их. Способом обойти повторное использование findViewById() является использование шаблона проектирования держателя представления.

Объект ViewHolder хранит каждое из представлений компонентов внутри поля тега макета, поэтому вы можете сразу получить к ним доступ без необходимости их повторного поиска. Во-первых, вам нужно создать класс для хранения точного набора представлений.

Нет клонирования, только повторное использование вида

person karvoynistas    schedule 20.10.2014