studio programacion para herramientas desarrollo con avanzado aplicaciones android listview

programacion - Android ListView desplazándose hacia arriba



manual android studio avanzado (7)

En algunos requisitos diferentes. Si desea desplazarse hacia arriba al igual que mientras chatea.

mListView.smoothScrollToPosition(mAdapter.getCount());

Tengo un ListView con filas personalizadas. Cuando se hace clic en cualquiera de estas filas, los datos de ListView se regeneran. Me gustaría que la lista vuelva a la parte superior cuando esto suceda.

Inicialmente intenté usar setSelection(0) en OnClickListener cada fila para lograr esto pero no tuve éxito (creo que porque ListView pierde su posición de desplazamiento cuando sus datos se invalidan, por lo que mi llamada a setSelection se deshace. Todavía no entiendo cómo ListView decide a dónde desplazarse después de la invalidación, sin embargo).

La única solución de trabajo que conozco fue la proporcionada por Romain Guy aquí: http://groups.google.com/group/android-developers/browse_thread/thread/127ca57414035301

Implica ( View.post ) ing la llamada a _listView.setSelection(0) . Encontré que esto funciona bastante mal. La lista generada recientemente aparece sin cambiar su ubicación de desplazamiento y hay una demora considerable antes de que se desplace de nuevo a la parte superior.

¿Hay alguna forma mejor de lograr esta funcionalidad?

Cualquier ayuda sería muy apreciada.

¡Gracias!


Lo he intentado mucho pero este me funcionó

list.smoothScrollToPosition(0);


Personalmente, te recomiendo que encuentres un patrón de IU diferente. Es posible que los usuarios encuentren intuitivo su enfoque actual de "hacer clic, y la lista cambia in situ ", pero soy escéptico.

Podría intentar subclasificar ListView y redefinir layoutChildren() para encadenar a la superclase, luego llamar a setSelection(0) en el caso de que sea necesario. Si el "retraso considerable" se debe solo a la llamada a la post() , esto debería aclararla.


Si necesita desplazamiento instantáneo justo después de que se cambiaron los datos del adaptador ListView , tenga en cuenta que puede que aún no se haya completado. En este caso, debe post() su setSelection() o setSelectionAfterHeaderView() través de Handler para que se llame más tarde en la cola.

listView.Handler.post(new Runnable() { @Override public void run() { listView.setSelectionAfterHeaderView(); } });

Esto funcionó para mí.


Simplemente uso listview.setSelection(0);

Funciona bien para mí


call listView.setSelectionAfterHeaderView(); para desplazarse hacia arriba


como solución alternativa, puede crear un nuevo adaptador que contenga los nuevos datos regenerados y luego llamar a ListView.setAdapter. después de esa llamada ListView.setSelection (n).

Por cierto, la solución provista por Commonsware funciona.