Обновите ArrayAdapter в Android - PullRequest
       0

Обновите ArrayAdapter в Android

2 голосов
/ 06 декабря 2010

Как обновить ArrayAdapter без потери позиции прокрутки?

Вот как я сейчас это делаю. Я создаю метод обновления в подклассе 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;
}

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

1 Ответ

2 голосов
/ 07 декабря 2010

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

...