Если вы хотите получить лучшее объяснение о том, как работает ViewHolder, ознакомьтесь с выступлением Романа Гая о Google I / O 2009 в youtube , особенно в первые 15 минут.
Короче говоря, Adapter
функционирует как связь между базовыми данными и ViewGroup
.Он будет отображать столько View
с, сколько требуется для заполнения экрана.При прокрутке или любом другом событии, которое выдвигает View
вне экрана, Adapter
будет повторно использовать View
, заполненный правильными данными, для отображения на экране.
Метод getView(int pos, View view, ViewGroup parent)
будет использовать правильный View
в любое время, независимо от вашего макета.Я не знаю, как это работает, но я уверен, что вы можете просмотреть исходный код любого адаптера (например, ArrayAdapter.java ), если вам интересно.
ViewHolder
просто сохраняет указатель на Views
, полученный с помощью view.findViewById(int id)
.Адаптер несет ответственность за возвращение правильных данных, соответствующих любой позиции.
Слайды с 11 по 13 из Презентация Ромена сделает его намного более понятным, чем все, что я могу написать.