От android docs - Объект Adapter выступает в качестве моста между AdapterView (например, ListView в вашем случае) и базовыми данными для этого представления. Адаптер обеспечивает доступ к элементам данных и также отвечает за создание представления для каждого элемента в наборе данных.
Таким образом, всякий раз, когда ListView должен отображать определенную строку данных, он запрашивает связанный адаптер, чтобы предоставить представление, соответствующее данным в этой позиции, с помощью метода getView(). Это может происходить всякий раз, когда представление необходимо обновлять на экране (например, во время создания/прокрутки и т. Д.).
Как разработчик приложения, вам не нужно беспокоиться о том, в какой момент вызывается getView(), пока вы предоставляете конкретную реализацию getView() в своем адаптере. Убедитесь, что метод эффективен (миниатюры и т. Д. Должны быть загружены в фоновый поток) для оптимальной производительности.
Обратитесь к [LINK] (http://www.ezzylearning.com/tutorial.aspx?tid=1763429&q=customizing-android-listview-items-with-custom-arrayadapter), в нем есть ясное и понятное объяснение CustomAdapter код образца –