Другой способ сделать это - использовать другой макет для 4-го элемента (с дополнительным дополнением). Это похоже на ваше решение, но, возможно, немного «чище». Я предполагаю, что вы распространяете ArrayAdapter.
В адаптере переопределить метод getViewTypeCount():
@Override public int getViewTypeCount() {
return 2;
}
Таким образом, вы говорите, ваш адаптер, который вы будете использовать два различных макетов для ваших деталей. Далее, вы должны указать, какие элементы будут иметь тип переопределяя другой метод:
@Override public int getItemViewType(int position) {
if(position == 3) {
return 0;
} else {
return 1;
}
}
Это подскажет адаптер использовать другой вид (только) для 4-го элемента в списке, и это не будет повторно использовать для других элементов. Теперь для последней части, переопределить onCreateView():
@Override public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null) {
LayoutInflater inflater = LayoutInflater.from(context);
if(position == 3) {
convertView = inflater.inflate(R.layout.your_layout_with_padding, parent, false);
} else {
convertView = inflater.inflate(R.layout.your_regular_item_padding, parent, false);
}
//TODO this is the place to initialize your view holder
} else {
//TODO this is the place to restore your view holder
}
//TODO setup your view here
return convertView;
}
Для элемента с позицией == 3 (4 пункта в списке) convertView аргументом GetView() метод будет нулевым, так как это первый (и единственный) элемент типа 1 в списке. Поэтому вы можете раздувать другой макет, который включает в себя дополнение для этого элемента.
вы можете поделиться своим методом getView? –
Добавить элемент пустого списка? – user1888162