studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones android listview scroll

para - manual de programacion android pdf



Android ListView agrega elementos a la parte superior sin vista de lista scroll (3)

Esta pregunta ya tiene una respuesta aquí:

Tengo un listView y deseo agregar nuevos elementos a la parte superior de la vista de lista, pero no quiero que la vista de lista desplace su contenido. Quiero que el usuario mire el mismo artículo que estaba mirando antes de agregar nuevos elementos.

Así es como agrego nuevos elementos a ListView:

this.commentsListViewAdapter.addRangeToTop(comments); this.commentsListViewAdapter.notifyDataSetChanged();

y este es el método addRangeToTop :

public void addRangeToTop(ArrayList<Comment> comments) { for (Comment comment : comments) { this.insert(comment, 0); } }

esta es mi listaVer:

<ListView android:id="@+id/CommentsListView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_above="@+id/AddCommentLayout" android:stackFromBottom="true" > </ListView>

Lo que quiero hacer es cargar comentarios antiguos cuando el usuario se desplaza a la parte superior.

Gracias por tu ayuda.


Aquí encontré la solución. Posición de retención en ListView después de llamar a notifyDataSetChanged

Perdón por pregunta duplicada El código final es este:

int index = this.commentsListView.getFirstVisiblePosition() + comments.size(); View v = this.commentsListView.getChildAt(commentsListView.getHeaderViewsCount()); int top = (v == null) ? 0 : v.getTop(); this.commentsListViewAdapter.AddRangeToTop(comments); this.commentsListViewAdapter.notifyDataSetChanged(); this.commentsListView.setSelectionFromTop(index, top);


Puede ser que esto es lo que estás buscando:

android:transcriptMode="normal"

"Esto hace que la lista se desplace automáticamente hacia abajo cuando se recibe una notificación de cambio de conjunto de datos y solo si el último elemento ya está visible en la pantalla". - como se cita here


También eche un vistazo al método de ListView public void setSelection (int position) . Después de agregar nuevos comentarios y notificar a su adaptador, puede usarlo para mantener el elemento seleccionado.

// Get the current selected index int previousSelectedIndex = yourListView.getSelectedItemPosition(); // Change your adapter this.commentsListViewAdapter.AddRangeToTop(comments); this.commentsListViewAdapter.notifyDataSetChanged(); // Determine how many elements you just inserted int numberOfInsertedItems = comments.size(); // Update the selected position yourListView.setSelection(previousSelectedIndex + numberOfInsertedItems);

NOTA: El código no está probado. Buena suerte