63 votes

Android Chargement dynamique de Listview en fin de défilement?

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?

42voto

ramz Points 676

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.

19voto

shontauro Points 778

Ok je l' ai vu que c'est un problème commun, donc je l' ai fait une petite bibliothèque avec une charge personnalisée plus et tirer pour rafraîchir ListView dans github, s'il vous plaît vérifier à ici , tout est très expliqué dans le référentiel.

10voto

Heiko Rupp Points 15153

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.

8voto

Mahesh Points 586

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 :)

8voto

Akshat Agarwal Points 1011

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
        }
        });
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X