2012-02-27 9 views
5

Cómo es posible hacer una setSelection (posición) uniforme para listFragment. Para las vistas de lista regulares, es posible llamar a smoothScrollToPosition (posición) pero esto solo funciona para api lvl 8 y superior, pero esto no importa porque no funciona para listfragment y no para api lvl 7.Android cómo hacer setSelection() para listfragment animado?

Cualquier idea , las sugerencias que ayudarán a implementar esto son muy apreciadas.

Respuesta

21

Mark D es correcto que, si se desea suavizar desplácese al ListView en un ListFragment, debe llamar al getListView() en el ListFragment y luego llamar al smoothScrollToPosition(int) en el ListView que se devuelve. Por supuesto, esto solo funciona hasta el nivel 8 de API porque es cuando se introdujo smoothScrollToPosition(int) en AbsListView, la superclase de ListView.

supongo que se podría mirar el código en AbsListView.java para ver lo que hace y tratar de replicarlo en su propia subclase de AbsListView o ListView. Está claro de inmediato que smoothScrollToPosition(pos) solo llama a start(pos) en una instancia de una clase interna PositionScroller, pero parece un tanto complicado replicar ese comportamiento en su propia subclase ya que el PositionScroller recibe llamadas de varios otros puntos como onDetachedFromWindow(), public void onWindowFocusChanged(boolean hasWindowFocus). No tengo claro cómo integraría limpiamente su comportamiento PositionScroller en su subclase según la versión API 7 de AbsListView.

Si fuera mi decisión, con API 7 y anterior componer menos del 8% de los dispositivos que acceden al Android Market en el último data set, simplemente patearía y haría algo más simple como setSelectionFromTop siempre que el API sea inferior a 8 (detectado por Build.VERSION.SDK_INT).

+0

Gracias por una respuesta directa :) – Warpzit

+0

¡Funcionó aquí también! Gracias – Aci89

6

No creo que usted puede hacer esto para el nivel de API 7, pero a ver si no se puede por desplazamiento suave va así:

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

¿realmente lo has probado? Esto no es compatible con listfragment. – Warpzit

+0

Pude obtener una versión de esto para trabajar en un dispositivo Honeycomb y un dispositivo ICS. ¿Dónde ves que no es compatible (puedes tener razón)? –

Cuestiones relacionadas