Ответ 1
Используйте метод post()
, чтобы дождаться завершения обновления после вызова notifyDataSetChanged()
:
adapter.notifyDataSetChanged();
list.post( new Runnable() {
@Override
public void run() {
//call smooth scroll
}
});
У меня есть пользовательский адаптер для настройки ListView и работает нормально. При нажатии кнопки что-то изменяется в базовых данных, поэтому для обновления ListView требуется notifyDataSetChanged. Хорошо. Но я также хочу, чтобы ListView прокручивал строку, в которой произошло изменение. Для этого я вызываю smoothScrollToPosition сразу после notifyDataSetChanged. И это не работает.
Если я не вызываю notifyDataSetChanged, тогда прокрутка работает, поэтому уведомление блокирует прокрутку. Вероятно, я буду сражаться с событиями, которые будут обработаны в будущем. Может кто-нибудь дать мне указатель на то, что идет не так?
Используйте метод post()
, чтобы дождаться завершения обновления после вызова notifyDataSetChanged()
:
adapter.notifyDataSetChanged();
list.post( new Runnable() {
@Override
public void run() {
//call smooth scroll
}
});
Я пробовал код примера dmon, и я вижу, что он не всегда работает.
На самом деле я нашел другой подход для прокрутки:
adapter.notifyDataSetChanged();
channelsListView.setSelection(scrollPos); // it works without smoothScrollToPositionFromTop(..) or smoothScrollToPosition() methods call.
Я нашел основную идею использовать выше метод после этого ответа: fooobar.com/info/120914/...