2011-11-23 14 views
7

Quiero tocar un control en la pantalla y hacer que el ListView se desplace hasta que una fila determinada esté en la parte superior de la pantalla, una característica que parece ser muy fácil en iOS.smoothScrollToPositionFromTop para Froyo ListView?

Encontré tal método en la API: http://developer.android.com/reference/android/widget/AbsListView.html#smoothScrollToPositionFromTop(int, int) Sin embargo, esto es para API Level 11, Honeycomb. Eso significa que los teléfonos no pueden usarlo hasta Ice Cream Sandwich, y pasará mucho, mucho tiempo hasta que sea práctico configurar Ice Cream Sandwich como requisito mínimo para ejecutar aplicaciones.

¿Hay alguna manera de obtener esta misma funcionalidad en Froyo?

Respuesta

4

Uso

setSelection (int position) 
+0

Usted sabe, yo hubiera jurado que lo intenté y no se desplazó por la lista. Y he aquí, salta la lista con la fila correcta en la parte superior de la pantalla, ¡lo cual es genial! Me preocupan los posibles efectos secundarios indeseables de ese enfoque, ya que no fue pensado para este propósito, y sería bueno tener un desplazamiento suave en lugar del salto repentino ... así que todavía estoy aceptando respuestas si alguien tiene una mejor solución. Gracias por la pronta respuesta, gwa, me apoyaré en eso si es necesario. :) –

+0

No hay problema Chad! Lo uso en mi aplicación y hasta ahora funcionó bastante bien. Avísame en caso de que encuentres algo mejor. ¡Gracias! – gwa

12

El siguiente código no es perfecto, pero hace el trabajo en muchos casos:

if (android.os.Build.VERSION.SDK_INT >= 11) 
{ 
    listView.smoothScrollToPositionFromTop(p, 0); 
} 
else if (android.os.Build.VERSION.SDK_INT >= 8) 
{ 
    int firstVisible = listView.getFirstVisiblePosition(); 
    int lastVisible = listView.getLastVisiblePosition(); 
    if (p < firstVisible) 
     listView.smoothScrollToPosition(p); 
    else 
     listView.smoothScrollToPosition(p + lastVisible - firstVisible - 2); 
} 
else 
{ 
    listView.setSelectionFromTop(p, 0); 
} 

+0

Tenga en cuenta que '' smoothScrollToPositionFromTop() '' tiene un error conocido. Consulte http://stackoverflow.com/questions/14479078/smoothscrolltopositionfromtop-is-not-always-working-like-it-should/#20997828 para obtener información sobre el problema y la solución. –

Cuestiones relacionadas