2012-02-27 17 views
5

Jak można wygładzić selectSelection (position) dla listFragment. Dla regularnych odsłon można wywołać smoothScrollToPosition (position), ale działa to tylko dla api lvl 8 i wyżej, ale to nie ma znaczenia, ponieważ nie działa w przypadku listfragmentu, a nie w dół do api lvl 7.Android jak zrobić animowany setSelection() dla listfragmentu?

Wszelkie pomysły , sugestie, które pomogą w realizacji tego jest bardzo mile widziane.

Odpowiedz

21

Mark D jest poprawna, że ​​jeśli chcesz, aby wygładzić przewiń ListView w ListFragment, musisz zadzwonić pod numer getListView() na ListFragment, a następnie zadzwonić pod numer smoothScrollToPosition(int) na zwróconym ListView. Oczywiście działa to tylko na poziomie API 8, ponieważ wtedy smoothScrollToPosition(int) zostało wprowadzone do AbsListView, nadklasy ListView.

Przypuszczam, że można spojrzeć na kod w AbsListView.java, aby zobaczyć, co robi i spróbuj go replikować w swojej własnej podklasie: AbsListView lub ListView. Od razu wiadomo, że smoothScrollToPosition(pos) po prostu wywołuje start(pos) na instancji klasy wewnętrznej PositionScroller, ale wydaje się nieco skomplikowane replikować to zachowanie we własnej podklasie, ponieważ PositionScroller zostaje wywołane z kilku innych miejsc, takich jak onDetachedFromWindow(), public void onWindowFocusChanged(boolean hasWindowFocus). Nie jest dla mnie jasne, w jaki sposób można by całkowicie zintegrować zachowanie PositionScroller z podklasą w oparciu o wersję API 7 w wersji AbsListView.

Jeśli to była moja decyzja, z interfejsem API 7 i wcześniejszym składającym się na mniej niż 8% urządzeń z dostępem do Android Market w najnowszej wersji data set, po prostu puntuję i robię coś prostszego, jak setSelectionFromTop, gdy interfejs API jest niższy niż 8 (wykryty przez Build.VERSION.SDK_INT).

+0

Dzięki za pełną odpowiedź :) – Warpzit

+0

To też zadziałało! Dzięki – Aci89

6

Nie sądzę, można to zrobić na poziomie API 7, ale sprawdzić, czy nie można gładkie przewijania przechodząc tak:

listFragment.getListView().smoothScrollToPosition(0); 
+0

Czy próbowałeś tego? To nie jest obsługiwane dla listfragmentu. – Warpzit

+0

Udało mi się uzyskać wersję tego do pracy na urządzeniu Honeycomb i urządzeniu ICS. Gdzie widzisz, że jest nieobsługiwany (możesz mieć rację)? –