Cuando se utiliza scrollTo ListView no se actualiza, pero al desplazarse manualmente se actualiza
Tengo diferentes colores para diferentes líneas en el ListView, estableciendo el color del cuadro de texto en función del número de línea (en getView () de adaptador). Ahora, cuando desplazo manualmente el ListView hacia arriba, el color correcto se muestra en las líneas inferiores que se revelan. Pero cuando uso scrollTo, esto no sucede, todas las líneas reveladas tienen el mismo color (no se actualizan).
¿Alguien se ha enfrentado a este problema? Esto parece desconcertante!
- Android ListView no resalta cuando se establece OnClickListener
- Casillas de verificación en un ListView - Cuando selecciono el primero, comprueba el último y viceversa
- ¿Cómo puedo alinear verticalmente un elemento dentro de una lista usando el diseño relativo?
- Menú emergente en ListView personalizado
- ¿Qué es mejor, listview o linearlayout en scrollview cuando los elementos son muy limitados?
- Android: eliminar el divisor de algunos listitems en listview
- Cómo establecer la altura del elemento ListView
- ¿Cómo evitar un doble toque en un ListView?
- Android Studio Project: parte inferior de la interfaz de usuario está cortada
- Android ListView Seleccionar animación
- Android lista personalizada con espacio entre los elementos
- Rellenar ListView en fragmento después de Async hecho de la actividad
- Uso de la biblioteca Picasso con ListView
ListView#scrollTo
no desplaza el contenido de la lista. (Es un método de vista estándar, y no es específico para las listas en absoluto: se desplaza la vista ListView en sí.)
En su lugar, intente usar ListView#setSelectionFromTop(0, int y)
para desplazarse.
API 19+ tiene un método ListView#scrollListBy(int y)
si está programando para KitKat y más.
En nuestro proyecto ListView#setSelectionFromTop(0, int y)
no tiene ningún efecto. Así que hackeado esto en compat-estilo:
class Hacks { static { Method trackMotionScroll = null; if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { try { trackMotionScroll = AbsListView.class .getDeclaredMethod("trackMotionScroll", int.class, int.class); trackMotionScroll.setAccessible(true); } catch (NoSuchMethodException e) { Exceptions.crash(e); } } listViewTrackMotionScroll = trackMotionScroll; } public static void scrollListBy(ListView listView, int y) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { listView.scrollListBy(y); } else { try { listViewTrackMotionScroll.invoke(listView, -y, -y); } catch (Exception e) { Exceptions.crash(e); } } } }
- Android: Gestos no realizados bien
- Cómo obtener el nombre de satélite o el número cuando estamos recibiendo la ubicación a través de GPS en Android?