Ответ 1
Чтобы понять это, вы должны сначала понять, как BaseAdapter
работает, поскольку CursorAdapter
является подклассом BaseAdapter
.
Android поддерживает пул представлений для ListView
, который он вам даст, чтобы вы могли повторно использовать его, а не каждый раз создавать новое представление.
В BaseAdapter
у вас будет функция под названием getView()
, к которой один из параметров является View
объектом с именем convertView
. В принципе, это convertView
будет null
, если список будет загружен в первый раз, и он не будет null
после того, как вы начнете перемещать список. Поэтому в методе getView()
вашего BaseAdapter
вы проверите, есть ли convertView
null
. Если да, вы будете раздувать его. Затем вы можете использовать представление и установить его элементы как обычно. Это значительно улучшит производительность прокрутки списка.
A CursorAdapter
упрощает использование, когда источником данных списка является база данных. Однако в адаптере для курсора Android заботится о том, является ли convertView
null
или нет. В методе newView()
вы просто раздуваете представление и возвращаете его. В методе bindView()
вы устанавливаете элементы своего представления.
В качестве примера представьте себе список на устройстве, которое может отображать до 11 элементов списка на экране. В этом случае newView()
вызывается до 11 раз. Однако bindView()
будет вызываться много раз всякий раз, когда вы просматриваете представление списка. 11 просмотров, созданных в вашем методе newView, будут повторно использоваться снова и снова при прокрутке списка.