2010-12-06 2 views
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; 
} 

Однако, это кажется ужасно неэффективно и подвержено ошибкам. Есть ли способ лучше?

ответ

2

Почему вы не распространяете BaseAdapter? Там вам просто нужно обновить свой список внутри, а затем позвонить notifyDataSetChanged() ... :-)

+0

Не было бы сбросить текущую позицию прокрутки? – hpique

+1

Обычно нет - список должен оставаться там, где он (по крайней мере, если соответствующая позиция прокрутки не находится за пределами диапазона списка). – mreichelt