Android ListView setOnScrollListener
Estoy teniendo problema con mi setOnScrollListener. Sólo sigue llamando a mi asynctask cada vez que se desplaza a la parte inferior de la lista. ¿Cómo puedo configurar el setOnScrollListener para cargar sólo una vez que llego a la parte inferior.
listview.setAdapter(adapter); mProgressDialog.dismiss(); listview.setOnScrollListener(new OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { // TODO Auto-generated method stub } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { int lastInScreen = firstVisibleItem + visibleItemCount; if (lastInScreen == totalItemCount) { new loadmore().execute(); } else { } } });
- ¿Cómo crear este tipo de Listview en Android?
- State_activated en pre Honeycomb Devices
- Aplicación de la burbuja de chat de Android en ListView
- Cómo determinar si una vista es visible en un ListView?
- Dos ListView de lado a lado
- Cantidad total de elementos de lista en un ListView
- ¿Cómo resaltar varios elementos en una vista de lista?
- Implementar desplazamiento sin fin en ListView
- Cómo configurar onContextItemClickListener para un menú contextual de ListView?
- Android ListView Ir a la posición del cursor
- ¿Cómo hacer que mis elementos de ListView puedan hacer clic?
- Snap de vista de lista al elemento
- ¿Cómo puedo configurar un ListView personalizado con un divisor mediante Android?
El método OnScroll se llama cada vez que se desplaza hacia abajo en la vista de lista, por lo que la mejor opción para usted es utilizar algún tipo de relleno, como el implementado aquí .
public class EndlessScrollListener implements OnScrollListener private int visibleThreshold = 5; private int currentPage = 0; private int previousTotal = 0; private boolean loading = true; public EndlessScrollListener() { } public EndlessScrollListener(int visibleThreshold) { this.visibleThreshold = visibleThreshold; } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { if (loading) { if (totalItemCount > previousTotal) { loading = false; previousTotal = totalItemCount; currentPage++; } } if (!loading && (totalItemCount - visibleItemCount) <= (firstVisibleItem + visibleThreshold)) { // I load the next page of gigs using a background task, // but you can call any function here. new LoadGigsTask().execute(currentPage + 1); loading = true; } } @Override public void onScrollStateChanged(AbsListView view, int scrollState) { } }
VisibleThreshold – La cantidad mínima de elementos que debe tener por debajo de su posición de desplazamiento actual, antes de cargar más.
CurrentPage – La página actual de los datos que ha cargado
PreviousTotal – El número total de elementos en el conjunto de datos después de la última carga
Loading – True si todavía estamos esperando el último conjunto de datos para cargar.