android - studio - listview kotlin
Posición de retención en ListView después de llamar a notifyDataSetChanged (6)
Estoy usando un OnScrollListener para agregar elementos dinámicamente a un ListView cuando el usuario se desplaza hacia la parte inferior. Después de agregar los datos al adaptador y llamar a notifyDataSetChanged, el ListView vuelve a la parte superior. Idealmente, me gustaría mantener el puesto en ListView. ¿Alguna idea sobre cómo debo hacer esto?
¿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);
EDITAR 28/09/2017:
La API ha cambiado bastante desde 2015. Es similar, pero ahora sería:
// save index and top position
int index = mList.FirstVisiblePosition; //This changed
View v = mList.getChildAt(0);
int top = (v == null) ? 0 : v.Top; //this changed
// notify dataset changed or re-assign adapter here
// restore the position of listview
mList.setSelectionFromTop(index, top);
Implementé PostDelayed y estaba parpadeando al actualizar. Busqué más y descubrí que estaba haciendo las cosas mal. 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.
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();
}
estoy usando
listView.getFirstVisiblePosition
para mantener la última posición visible.
La situación:
Cuando configura un adaptador para su vista de lista, actualiza su estado. Por lo tanto, normalmente se desplaza automáticamente.
La solución:
Asigne un adaptador a la vista de lista si no tiene ninguno; de lo contrario, solo actualice el conjunto de datos del adaptador asignado, no lo vuelva a configurar en su vista de lista.
Un tutorial detallado se explica en el siguiente enlace;
Vista de lista de Android: mantenga su posición de desplazamiento cuando actualice
¡Buena suerte!