Android, как сделать анимированный setSelection () для listfragment?

Как можно сделать гладкий setSelection (position) для listFragment. Для обычных списков можно вызвать smoothScrollToPosition (position), но это работает только для api lvl 8 и выше, но это не имеет значения, поскольку оно не работает для listfragment, а не api lvl 7.

Любые идеи, предложения, которые помогут реализовать это, очень приветствуются.

Mark D правильно, что если вы хотите сгладить прокрутку ListView в ListFragment , вам нужно вызвать getListView() в ListFragment а затем вызвать smoothScrollToPosition(int) в возвращаемом ListView . Конечно, это работает только до уровня API 8, потому что именно тогда, когда smoothScrollToPosition(int) был введен в AbsListView , суперкласс ListView .

Я полагаю, вы можете посмотреть код в AbsListView.java чтобы посмотреть, что он делает, и попытаться воспроизвести его в вашем собственном подклассе AbsListView или ListView . Сразу видно, что smoothScrollToPosition(pos) просто вызывает start(pos) на экземпляре внутреннего класса PositionScroller , но выглядит несколько сложнее для репликации этого поведения в вашем собственном подклассе, так как PositionScroller onDetachedFromWindow() из нескольких других мест, таких как onDetachedFromWindow() , public void onWindowFocusChanged(boolean hasWindowFocus) . Мне не совсем ясно, как бы вы аккуратно интегрировали поведение PositionScroller в ваш подкласс на основе версии API AbsListView API 7.

Если бы это было мое решение, с API 7 и более ранними версиями, составляющими менее 8% устройств, обращающихся к Android Market в последнем наборе данных , я бы просто поддразнивал и делал что-то более простое, как setSelectionFromTop всякий раз, когда API меньше 8 (обнаружено Build.VERSION.SDK_INT).

Я не думаю, что вы можете сделать это для уровня API 7, но посмотрите, не можете ли вы сгладить прокрутку, следующим образом:

 listFragment.getListView().smoothScrollToPosition(0);