Страницы

Поиск по вопросам

пятница, 5 июля 2019 г.

Повторение Item в ListView (CustomAdapter)

Здравствуйте!
Делаю вывод ListView, всё хорошо до момента пока ListView не становится длинным и появляется скролл.
На экран помещается 13 строк, я пролистываю его дальше и элементы начинают повторяться:
Вот после 13 должно идти дальше до 30.
В Адаптере это выглядит так:
@Override public View getView(int position, View convertView, ViewGroup parent) { View v; String str = items.get(position); if (convertView == null) { v = LayoutInflater.from(contextAdapter).inflate(R.layout.test_item, parent, false); TextView tvText = (TextView) v.findViewById(R.id.test_item_text); TextView tvText2 = (TextView) v.findViewById(R.id.test_item_text_2); if (tvText != null) tvText.setText("str:" + str); if (tvText2 != null) tvText2.setText("position:" + position); } else { v = convertView; } return v; }
Если я вынесу из if кусок с поиском элементов в лэйауте, то всё будет почти хорошо:
@Override public View getView(int position, View convertView, ViewGroup parent) { View v; String str = items.get(position); if (convertView == null) { v = LayoutInflater.from(contextAdapter).inflate(R.layout.test_item, parent, false); } else { v = convertView; } TextView tvText = (TextView) v.findViewById(R.id.test_item_text); TextView tvText2 = (TextView) v.findViewById(R.id.test_item_text_2); if (tvText != null) tvText.setText("str:" + str); if (tvText2 != null) tvText2.setText("position:" + position); return v; }

Но проблема в том, что каждый раз, когда я листаю список, он перестраивает ВСЕ видимые на данном экране элементы. Как сделать так, что бы он 1 раз сделал рендер итема, а потом брал из "сохраненных"?


Ответ

почитайте про паттерн ViewHolder здесь (п 6.3. Holder Pattern)

Комментариев нет:

Отправить комментарий