2
Как вы обновляете ArrayAdapter
, не теряя прокручиваемую позицию?Обновление ArrayAdapter в Android
Вот как я это делаю сейчас. Я создаю метод обновления в ArrayAdapter
подкласса, который делает следующее:
public void update(List<MyEntity> entities) {
for (MyEntity entity : entities) {
int position = this.getPosition(entity);
if (position >= 0) {
final MyEntity outdateEntity = this.getItem(position);
this.insert(entity, position);
this.remove(outdateEntity);
} else {
this.insert(entity, 0);
}
}
}
public int getPosition(MyEntity updatedEntity) {
for (int i = 0; i < this.getCount(); i++) {
if (this.getItem(i).getId() == updatedEntity.getId()) {
return i;
}
}
return -1;
}
Однако, это кажется ужасно неэффективно и подвержено ошибкам. Есть ли способ лучше?
Не было бы сбросить текущую позицию прокрутки? – hpique
Обычно нет - список должен оставаться там, где он (по крайней мере, если соответствующая позиция прокрутки не находится за пределами диапазона списка). – mreichelt