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.
- Android, LinearLayout no se desplaza
- Desplazamiento automático en ExpandableListView
- Botón de inicio de Android en la barra de herramientas de contracción con imagen
- Cómo usar la barra de desplazamiento y rápido Desplácese a NestedScrollView
- Se barajaron las imágenes al desplazar un ListView con un ViewHolder
¿Cómo hago esto?
- Android: FastScrolling SectionIndexer getSections () se llama sólo una vez
- Phonegap 3.0 - Android: Barra de desplazamiento nativa no visible
- Iniciar una animación onstart CustomViewPager
- No se puede cambiar el tamaño de los niños de diseño lineal en android reaccionar módulo nativo
- GridView con desplazamiento horizontal
- Android: Altura total de ScrollView
- Desplazamiento suave en Android
- Android: cómo saber si una vista se desplaza
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.
- Cómo bifurcar el código de todo el sistema operativo Android?
- ¿La instalación de Eclipse falló debido a un archivo APK no válido?