viewholder в ListView - теория и практика

Интерфейс, диалоги, темы, стили, меню
Ответить
Аватара пользователя
kondra007
Сообщения: 91
Зарегистрирован: 23 янв 2013, 14:49

viewholder в ListView - теория и практика

Сообщение kondra007 » 06 май 2014, 22:11

Здравствуйте, уважаемые форумчане!

У меня к вам такой вопрос: действительно ли необходимо использование ViewHolder в ListView ?
Дело в том, что я начинающий Android-разработчик и некоторые моменты пока тяжело понимать и применять, я использую ListView без холдера, просто делаю адаптер и присваиваю.

Вроде и так ничего не тормозит. Хотя проверял я на довольно мощных девайсах - Galaxy S2 и Galaxy S4.

И ещё: дайте, пожалуйста, простой пример, как этот ViewHolder использовать?

Viewer
Сообщения: 180
Зарегистрирован: 30 апр 2014, 11:42

Re: viewholder в ListView - теория и практика

Сообщение Viewer » 06 май 2014, 22:59

ViewHolder это не какой-то там класс API Андроид, это просто паттерн (шаблон) проектирования.
Чаще всего этот шаблон используется для оптимизации и увеличения быстродействия списков, чтобы при прокрутке не было лагов, но это только в том случае, если вы переопределяете метод getView адаптера и сами строите все элементы списка, это чаще всего нужно, если в списке меняются не только данные, но и внешний вид элементов. Если у вас список состоит из одинаковых элементов полученных из разметки в xml ресурсах, и эти элементы вы только заполняете данными, то вам это конечно не нужно.
Этот паттерн используется в основном чтобы уйти от длительной операции findViewById поиска отдельных элементов во viewgroup, особенно если этих элементов много.
Идея простая, создается специальный класс в экземплярах которого мы сохраняем ссылки на элементы viewgroup, т.е. нам нужно всего один раз найти объекты с помощью findViewById, а затем просто сохранить их в экземпляре этого специального класса. А сама ссылка на объект этого нашего специального класса сохраняется в тэге viewgroup.
Так просто принято называть этот специальный класс ViewHolder, вы можете его как угодно назвать хоть ViewAnchor какой-то.

Примеров в Интернете масса http://g.zeos.in/?q=ViewHolder

Ответить