Масштаб
Мне нужно прокручивать до определенной позиции гладко, а затем "прыгать" в другую позицию с помощью setSelection(anotherPosition). Это делается для создания иллюзии гладкой прокрутки (например,) 100 элементов в ListView. smoothScrollToPosition(100) длится слишком много, вы знаете.
Проблема
setSelection() не дожидается, пока smoothScrollToPositio n завершит свою работу, поэтому setSelection() вызывается немедленно, и пользователь видит только быстрый переход;
код
private final int scrollableItems = 20;
int firstVisiblePosition = mListView.getFirstVisiblePosition();
if (firstVisiblePosition < scrollableItems) {
mListView.smoothScrollToPosition(0);
} else {
mListView.smoothScrollToPosition(firstVisiblePosition - scrollableItems);
mListView.setSelection(0);
}
mListView.clearFocus();
Идея
ОК, мы могли бы изменить логику иллюзии гладкости: сначала setSelection(), затем прокрутите гладко (мы прокручиваем до самого первого элемента в верхней части списка):
int firstVisiblePosition = mListView.getFirstVisiblePosition();
if (firstVisiblePosition < scrollableItems) {
mListView.smoothScrollToPosition(0);
} else {
mListView.setSelection(scrollableItems);
mListView.smoothScrollToPosition(0);
}
mListView.clearFocus();