Posición de retención en ListView después de llamar a notifyDataSetChanged
Estoy utilizando un OnScrollListener para agregar elementos dinámicamente a un ListView cuando el usuario se desplaza a la parte inferior. Después de agregar los datos al adaptador y llamar a notifyDataSetChanged sin embargo, el ListView vuelve a la parte superior. Idealmente, me gustaría conservar la posición en el ListView. ¿Alguna idea sobre cómo debería hacer esto?
- ID de la lista no encontrada: android: list
- Android: consigue la posición del elemento en un listview dado su id:
- Poner un anuncio nativo de AdMob en una listaVer
- ListView no aparece en MainActivty de mi aplicación (una imagen adjunta)
- Ancho y color del borde del elemento ListView de Android
- Androide. RadioButtons en un ListView
- ¿Cómo puedo retrasar la carga de vistas en mi adaptador de lista mientras el usuario se desplaza rápidamente
- ¿Existen la posición getFirstVisiblePosition y getLastVisiblePosition de ListView?
- Cómo mantener la vista de lista para mostrar la última fila
- ListView: ¿Cómo espero hasta que esté cargado?
- ¿Cómo crear este tipo de Listview en Android?
- android usando setlistadapter () sin extender listactivity
- Seleccione sólo un botón de radio a la vez en la vista de lista personalizada, android
¿Podría ser esto lo que quieres?
// save index and top position int index = mList.getFirstVisiblePosition(); View v = mList.getChildAt(0); int top = (v == null) ? 0 : v.getTop(); // notify dataset changed or re-assign adapter here // restore the position of listview mList.setSelectionFromTop(index, top);
La situación:
Cuando configura un adaptador a su listview, actualiza su estado. Por lo tanto, normalmente se desplaza automáticamente.
La solución:
Asigne un adaptador a listview si no lo tiene, sino sólo actualiza el conjunto de datos del adaptador asignado, no vuelva a establecerlo en su listview.
Un tutorial detallado se explica en el siguiente enlace;
Android ListView: Mantenga su posición de desplazamiento cuando actualice
¡Buena suerte!
Implementé el postDelayed y estaba recibiendo parpadeo al actualizar. Busco un poco más y descubrí que estaba haciendo cosas malas. Básicamente no debería crear un nuevo adaptador cada vez que quisiera cambiar los datos. Terminé haciéndolo de esta manera y funciona:
//goes into your adapter public void repopulateData(String[] objects) { this.objects = null; this.objects = objects; notifyDataSetChanged(); } //goes into your activity or list if (adapter == null) { adapter = new Adapter(); } else { adapter.repopulateData((String[])data); }
Espero que esto ayude.
estoy usando
ListView.getFirstVisiblePosition
Para mantener la última posición visible.
Ir con el modo de transcripción de listview.
Prueba esto
boolean first=true; protected void onPostExecute(Void result) { if (first == true) { listview.setAdapter(customAdapter); first=false; } else customAdapter.notifyDataSetChanged(); }
- Texto con degradado en Android
- Necesita utilizar un tema Theme.AppCompat (o descendiente) con esta actividad. Cambiar a Theme.AppCompat causa otro error