Android come fare setSelection animate () per ListFragment?
Domanda
Come è possibile creare una setSelection (posizione) regolare per ListFragment. Per le normali visualizzazioni di elenchi è possibile chiamare smoothScrollToposition (posizione) ma questo funziona solo per API LVL 8 e oltre, ma questo non ha importanza perché non funziona per ListFragment e non fino a API LVL 7.
Qualsiasi idea, suggerimenti che aiuteranno a attuare questo è molto apprezzato.
Soluzione
Mark D è corretto, se si desidera levigare il scorrimento del ListView
in un ListFragment
, devi chiamare getListView()
sul ListFragment
e poi chiama smoothScrollToPosition(int)
sul ListView
che viene restituito. Naturalmente, questo funziona solo al livello 8 API perché è quando smoothScrollToPosition(int)
è stato introdotto a AbsListView
, la superclasse di ListView
.
Suppongo che potresti guardare il codice AbsListView.java
per vedere cosa fa e provare a replicarlo nella tua sottoclasse di AbsListView
o ListView
. È immediatamente chiaro che smoothScrollToPosition(pos)
chiama solo start(pos)
su un'istanza di una classe interiore PositionScroller
, ma sembra un po 'complicato replicare quel comportamento nella tua sottoclasse dal PositionScroller
viene chiamato da molti altri punti come onDetachedFromWindow()
, public void onWindowFocusChanged(boolean hasWindowFocus)
. Non è affatto chiaro per me come integreresti in modo pulito il comportamento di positionscroller nella tua sottoclasse in base alla versione API 7 di AbsListView
.
Se fosse stata la mia decisione, con API 7 e precedente che rappresentano meno dell'8% dei dispositivi che accedono al mercato Android nelle ultime novità set di dati, Farei solo un potto e farei qualcosa di più semplice come setSelectionFromTop
Ogni volta che l'API è inferiore a 8 (rilevata da build.version.sdk_int).
Altri suggerimenti
Non credo che tu possa farlo per API Livello 7, ma vedi se non riesci a levigare lo scorrimento andando così:
listFragment.getListView().smoothScrollToPosition(0);