Каждый раз, когда платформа повторно использует представление (т. Е. Объект convertView
, предоставленный методу getView()
, не равен нулю), вы должны найти соответствующие представления и установить их свойства.
В примере кода по указанной ссылке автор устанавливает значения для представления только во время создания, поэтому каждый раз, когда фреймворк повторно использует представление, оно имеет одинаковые свойства. Поэтому метод getView()
должен быть реализован так:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v;
if(convertView==null){
LayoutInflater li = getLayoutInflater();
v = li.inflate(R.layout.icon, null);
}
else
{
v = convertView;
}
TextView tv = (TextView)v.findViewById(R.id.icon_text);
tv.setText("Profile "+ position);
ImageView iv = (ImageView)v.findViewById(R.id.icon_image);
iv.setImageResource(R.drawable.icon);
return v;
}
Можно дополнительно оптимизировать метод getView()
, применив шаблон держателя вида.
Пожалуйста, обратитесь к презентации Романа Гая и Адама Пауэлла Мир ListView , поскольку он объясняет некоторые другие уловки, связанные с виджетами, которые расширяют класс AdapterView
.