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