範囲
<コード> setSelection(anotherPosition)でスムーズにスクロールして別の位置にジャンプする必要があります。これは、<コード> ListView で100項目の円滑なスクロールの錯覚を作成するために行われます。 <コード> smoothScrollToPosition(100)が長すぎます。
問題
<コード>setSelection() doesn't wait till <コード>smoothScrollToPosition finishes its work, so <コード>setSelection() is being called immediately and user sees quick jumping only;
コード
<コード>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();
アイディア
OK, we could change logic of smoothness illusion: first <コード>setSelection(), then scroll smoothly (we're scrolling to the very first item on top of the list):
<コード> int firstVisiblePosition = mListView.getFirstVisiblePosition();
if (firstVisiblePosition < scrollableItems) {
mListView.smoothScrollToPosition(0);
} else {
mListView.setSelection(scrollableItems);
mListView.smoothScrollToPosition(0);
}
mListView.clearFocus();