Подтвердить что ты не робот

SmoothScrollToPosition после notifyDataSetChanged не работает в android

У меня есть пользовательский адаптер для настройки ListView и работает нормально. При нажатии кнопки что-то изменяется в базовых данных, поэтому для обновления ListView требуется notifyDataSetChanged. Хорошо. Но я также хочу, чтобы ListView прокручивал строку, в которой произошло изменение. Для этого я вызываю smoothScrollToPosition сразу после notifyDataSetChanged. И это не работает.

Если я не вызываю notifyDataSetChanged, тогда прокрутка работает, поэтому уведомление блокирует прокрутку. Вероятно, я буду сражаться с событиями, которые будут обработаны в будущем. Может кто-нибудь дать мне указатель на то, что идет не так?

4b9b3361

Ответ 1

Используйте метод post(), чтобы дождаться завершения обновления после вызова notifyDataSetChanged():

adapter.notifyDataSetChanged();
list.post( new Runnable() {
    @Override
    public void run() {
    //call smooth scroll
    }
  });

Ответ 2

Я пробовал код примера dmon, и я вижу, что он не всегда работает.

На самом деле я нашел другой подход для прокрутки:

adapter.notifyDataSetChanged();
channelsListView.setSelection(scrollPos); // it works without smoothScrollToPositionFromTop(..) or smoothScrollToPosition() methods call.

Я нашел основную идею использовать выше метод после этого ответа: fooobar.com/info/120914/...