Чтобы дополнительно уточнить ответ CommonsWare, вот еще некоторая информация:
Операция li.inflate (необходима здесь для анализа разметки строки из XML и созданиясоответствующий объект вида) оборачивается оператором if (convertView == null) для повышения эффективности, поэтому раздувание одного и того же объекта не будет происходить снова и снова каждый раз, когда он появляется в представлении.
ОДНАКО другие части метода getView используются для установки других параметров и поэтому НЕ должны включаться в if (convertView == null) {} ... else {} .
Во многих распространенных реализациях этого метода некоторые элементы textView label, ImageView или ImageButton должны заполняться значениями из списка [position], используя findViewById и после этого .setText или .setImageBitmap операций.Эти операции должны выполняться после того, как и создадут представление с нуля с помощью инфляции и , получая существующее представление, если оно не равно нулю (например, при обновлении).
Еще один хороший пример, гдеэто решение применяется для ListView ArrayAdapter появляется в https://stackoverflow.com/a/3874639/978329