Понимание параметра convertView метода GetView
Здравствуйте, разработчики Android, я прочитал документацию по методу getView BaseAdapter, и я понял, что представление может быть повторно использовано / переработано, поэтому перед использованием убедитесь, что это представление не нулевое и имеет соответствующий тип. В моем случае каждый раз, когда convertview имеет значение null, и создается новое представление. Хотя список заполнен правильно, но я хотел бы знать, когда представление будет переработано и когда оно создаст новое представление.
2 ответа
В основном это переработано, когда вы прокручиваете свой список. Когда предмет спрятан - он может быть переработан и использован как новый видимый предмет. Попробуйте добавить ~100 элементов, прокрутите их и проверьте, сколько просмотров действительно создано.
so should check that this view is non-null and of an appropriate type before using
Итак, я считаю, что вы используете несколько макетов в ListView.
In my case every time convertview is null and new view is created
Это может быть потому, что вы не использовали:
@Override
public int getItemViewType(int position) {
return dataArray[position].getType();
}
@Override
public int getViewTypeCount() {
return TYPE_MAX_COUNT;
}
Though list is populated correctly,but I would like to know when view will be recycled and when it will create new view
Он не будет перезагружаться автоматически, вы должны проверить наличие ConvertView(не нулевого) и использовать его, вместо того, чтобы надувать новый View.
Сюда:
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
int type = getItemViewType(position);
if (convertView == null) {
holder = new ViewHolder();
switch (type) {
case TYPE1:
//inflate type1
break;
case TYPE2:
//inflate type2
break;
}
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
}
И ConvertView доступен (не нуль) для повторного использования, когда представление этого конкретного типа надувается хотя бы один раз и больше не отображается, потому что вы прокручивали список.