Je charge une liste depuis le serveur HTTP, 20 à la fois. À la fin de la liste, je veux charger les 20 prochaines données du serveur et ce processus se poursuivra jusqu'à la fin des données sur le serveur. J'ai utilisé la classe qui étend BaseAdapter pour remplir les 20 premières données. Que dois-je faire?
Réponses
Trop de publicités?Cela semble être une solution élégante aussi: http://benjii.me/2010/08/endless-scrolling-listview-in-android/
Il implémente également un AbsListView.OnScrollListener
et utilise une AsyncTask pour charger plus de contenu dès qu'un certain seuil d'éléments restants dans la vue de défilement actuelle est atteint.
Vous pouvez mettre en œuvre un AbsListView.OnScrollListener
, qui est informé et qui permet de charger plus de données.
Voir, par exemple,
....
ListView.setOnScrollListener(this);
....
Et puis un coup d'oeil à https://github.com/pilhuhn/ZwitscherA/blob/master/src/de/bsd/zwitscher/TweetListActivity.java#L287
Ou de prendre un coup d'oeil à la List9 exemple du sdk exemples.
Le code de Heiko Rupp est la meilleure option pour ce problème. La seule chose que vous devriez faire est de mettre en œuvre onScrollListener
et dans onScroll()
vérifiez s'il y a une fin de liste en utilisant le code
boolean loadMore = firstVisibleItem + visibleItemCount >= totalItemCount-1;
si vrai chargez vos données avec la mode régulière ..
Merci à Heiko Rupp pour cet extrait :)
C'est ce que j'avais l'habitude de charger plus de données à la fin de la listview
listview.setOnScrollListener(new OnScrollListener(){
@Override
public void onScroll(AbsListView view,
int firstVisibleItem, int visibleItemCount,
int totalItemCount) {
//Algorithm to check if the last item is visible or not
final int lastItem = firstVisibleItem + visibleItemCount;
if(lastItem == totalItemCount){
// you have reached end of list, load more data
}
@Override
public void onScrollStateChanged(AbsListView view,int scrollState) {
//blank, not using this
}
});