Wait unitl smoothScrollToPosition () termina
Escop
Preciso rolar para certa posição suavemente e depois "pular" para outra posição comsetSelection(anotherPosition)
. Isso é feito para criar uma ilusão de rolagem suave de (por exemplo) 100 itens emListView
. smoothScrollToPosition(100)
dura demais, você sabe.
setSelection()
não espera atésmoothScrollToPositio
n termina seu trabalho, entãosetSelection()
está sendo chamado imediatamente e o usuário vê apenas um salto rápido;
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();
IdéiOK, poderíamos mudar a lógica da ilusão de suavidade: primeirosetSelection()
, depois role suavemente (estamos rolando para o primeiro item no topo da lista):
int firstVisiblePosition = mListView.getFirstVisiblePosition();
if (firstVisiblePosition < scrollableItems) {
mListView.smoothScrollToPosition(0);
} else {
mListView.setSelection(scrollableItems);
mListView.smoothScrollToPosition(0);
}
mListView.clearFocus();