Configuración de la posición de desplazamiento de ListView bien en Android

Estoy enterado de setSelection() , setSelectionFromTop() , y setSelectionAfterHeaderView() , pero ninguno de ellos parece hacer lo que quiero.

Dado un elemento de la lista, quiero desplazarte para que esté en la vista. Si el elemento está por encima de la ventana visible de la lista, quiero desplazarte hasta que el elemento sea el primer elemento visible de la lista; Si el elemento está debajo de la ventana visible, quiero que se desplace hasta que sea el último elemento visible en la lista. Si el elemento ya está visible, no quiero que se produzca desplazamiento.

¿Cómo hago esto?

Se produce porque listView no se ha creado todavía. Trate de publicar tales como runnable:

 getListView().postDelayed(new Runnable() { @Override public void run() { lst.setSelection(15); } },100L); 

Creo que estaba buscando lo mismo, entonces encontré la siguiente solución:

 if (listview.getFirstVisiblePosition() > pos || listview.getLastVisiblePosition() <= pos) { listview.smoothScrollToPosition(pos); } 

API 8 se requiere para usar smoothScrollToPosition (que es un mínimo razonable de todos modos) por lo que son conscientes.

La respuesta de Sergey funciona, pero creo que la forma correcta de hacerlo es configurar un observador para que lo notifique cuando se haya creado el ListView .

 listView.getViewTreeObserver().addOnGlobalLayoutListener( new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { scrollTo(scrollToPosition); listView.getViewTreeObserver().removeGlobalOnLayoutListener(this); } }); 

Una mejor solución a la respuesta de Sergey es llamar a setSelection() más adelante en el ciclo de vida Activity / Fragment, quizás en onStart() . De esta manera, usted tiene la garantía de que el View está listo en lugar de usar algún retardo arbitrario.

  • Uso de JavaScript para desplazarse automáticamente en la tableta de galaxias
  • Desplazamiento horizontal automático de Android TextView
  • Android :: VideoView dentro de un ScrollView
  • Touchend no dispara después de touchmove
  • ¿Hay alguna manera de saber cuántos elementos están mostrando en una vista de lista?
  • Android: ¿Animación de Scroller?
  • Cómo habilitar el desplazamiento en un simpleadapter en el firmware X16 de Google Glass
  • Scrollview no desliza cuando es demasiado corto para desplazarse
  • Android No se puede eliminar el color en la parte superior e inferior
  • Android: onScrollStateChanged SCROLL_STATE_IDLE a veces no se dispara
  • Soluciones para GridView.scrollTo ()?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.