2013-07-08 7 views
0

Je jouais avec l'application gmail aujourd'hui pour la première fois depuis longtemps et j'ai vraiment apprécié le design du ListView et comment cela fonctionne. J'ai remarqué que les aperçus d'email sont chargés lorsque vous faites défiler vers le bas de la liste. Ce n'est pas un adaptateur de curseur conventionnel autant que je peux voir.Comment gérer de longues listes dans un monde idéal

Je suis dans une situation similaire où je peux avoir une liste de 0-1000 + messages dans une liste. Dans le passé, je pensais que l'adaptateur de curseur gérerait tout cela bien, mais ayant vu la façon dont gmail le fait, cela me fait penser que je devrais réécrire mon ListView.

Ma listview tire ses données d'une base de données sqlite, ce qui pour mon projet peut signifier que mon curseur est correct. Gmail télécharge probablement les e-mails à la volée et les stocke. La vue de liste de l'application Gmail est donc conçue pour cela.

De toute façon, j'apprécierais un peu de perspicacité.

+1

vous pouvez utiliser la technique de chargement paresseux. – OMAK

+0

Consultez ce http://stackoverflow.com/questions/1080811/android-endless-list –

Répondre

1

Vous parlez de ce qu'on appelle « liste sans fin », lorsque plus de données apparaît sur la liste à la demande, une fois défilement utilisateur à elle. Peu importe quelle est votre source de données - c'est un modèle de liste et fonctionnera bien avec n'importe quel ensemble de données, que ce soit un tableau ordinaire ou une base de données. Il existe des implémentations prêtes à l'emploi que vous pouvez essayer d'abord, comme https://github.com/commonsguy/cwac-endless

+0

La source de données ne doit pas être hors de propos. Si je télécharge à partir d'Internet, il y a un retard notable pour lequel l'utilisateur est informé. Cependant, un adaptateur de curseur est beaucoup plus rapide car il dessine clairement ses résultats directement à partir de l'appareil. – HGPB

+0

Si vous n'avez pas d'autres données, vous indiquez à l'utilisateur le type d'indicateur "occupé", téléchargez les données manquantes et mettez à jour la liste. Si les données sont déjà là, vous le montrez instantanément. Donc, peu importe d'où proviennent les données. –

+0

Étant donné que mes données sont sur l'appareil, une implémentation d'adaptateur de curseur est-elle satisfaisante pour de grandes quantités de données? Ou la performance de l'adaptateur de curseur se dégrader avec de grandes quantités de données? – HGPB

0

Essayez cette

@Override 
public void onScroll(AbsListView view, int firstVisibleItem, 
      int visibleItemCount, int totalItemCount) { 
if(firstVisibleItem + visibleItemCount >= (totalItemCount-2) && connection.hasDataConnectivity()) { 

     // fetch some more data 

     } 
} 
+0

Je ne cherchais pas vraiment comment implémenter cette fonctionnalité, mais merci! – HGPB

Questions connexes