Вы не указали, что делает delete(f)
, но если он удалит его из списка полей, то ваш «действительный счет» будет эффективно уменьшаться.
Чтобы переписать это несколько и решить проблему:
for (int index = getFieldCount() - 1; index >= 0; index--){
Field f = getField(index);
if (f instanceof MyButtonField) {
delete(f);
}
}
Это будет идти от конца полей вместо начала , поэтому не имеет значения, удаляете ли вы запись, и все перемешивается - элементы, которые перемешиваются те, на которые вы уже смотрели.