IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants graphiques Android Discussion :

Chargement progressif d'une ListView


Sujet :

Composants graphiques Android

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 62
    Par défaut Chargement progressif d'une ListView
    Bonjour à tous !

    Sur une de mes applications, je dispose d'un système de score qui charge une listview à partir d'une base de donnée externe (via une Asynctask) et donne les résultats 200 par 200 (on passe à la page suivante par un bouton). Mais cela fait assez "vieillot", j'aimerais utiliser le même système de chargement que l'on retrouve par exemple sur l'Android Market (avec un "Chargement en cours quand on arrive en bas de la liste, qui chargera la suite de la liste).

    Savez-vous quel fonction est utilisé pour faire ceci ? Merci beaucoup !

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Février 2008
    Messages
    658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 658
    Par défaut
    Regarde bien ce lien, voire meme telecharge le code... le chargement est dynamique par 25 actualité. Il recupere les données 25 par 25 selon que l'utilisateur s'approche de la fin.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
     
     
    listNewsView=(ListView)findViewById(R.id.new_listview);
           listNewsView.setOnScrollListener(new OnScrollListener() {
       @Override
       public void onScrollStateChanged(AbsListView view, int scrollState) { 
              if(scrollState== OnScrollListener.SCROLL_STATE_IDLE)
              {
                   int last=view.getLastVisiblePosition();// la position de la derniere elements par
                   int total= view.getCount();// Le nombre total d'element contenue de la list
                   if(last+2>total)
                   {
                    //Si  la derniere element +2 est superieur à total alors cela veut dire qu'on n'est à la //fin.
    //maxNumberNews=25 par exemple
                    WebserviceLoader.getListNews(handler, total, maxNumberNews);
                   } 
              } 
       }

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 45
    Par défaut
    ça m'intéresse ça, je pique le code :p

    merci beaucoup

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 45
    Par défaut
    j'aurai juste une question sur la dernière ligne du code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WebserviceLoader.getListNews(handler, total, maxNumberNews);
    le WebserviceLoader : qu'est ce que c'est ?

    eclipse me signale une erreur, mais ne me propose pas d'import.

  5. #5
    Membre chevronné

    Profil pro
    Inscrit en
    Février 2008
    Messages
    658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 658
    Par défaut
    Il faut telecharger tout le code.. le WebsServiceRequest... c'est une de mes vieux classes que j'utilise pour charger des données depuis un serveur...Son code complet se trouve dans le fichier àtelecharger.

    Ne copie pas seulement ce code, va telecharger le code source complet...

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 45
    Par défaut
    en fait j'ai adapté le code à mon programme actuel, et ça marche nickel Merci en tout cas

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 62
    Par défaut
    Avec beaucoup de retard, je remercie jahbromo pour son aide. Cependant, dans mon code actuel, j'ai un soucis que je ne sais pas comment régler. Je m'explique : J'arrive en bas de ma listview, le code lance une Asynctask pour aller récuperer les éléments suivants et les afficher, sauf qu'une fois le travail effectué, il me supprime les éléments déjà présents pour les remplacer par les nouveaux. Est-il possible d'éviter cela ?

    Voici les extraits de code concernés :

    Dans la récupération des données (je prépare un SimpleAdapter) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    		          for(int i=0;i<jArray.length();i++){
    		                 json_data = jArray.getJSONObject(i);
     
     
    		                 HashMap<String, String> map = new HashMap<String, String>();
    		    	        	map.put("rowid", Integer.toString(n*200+i+1) + ".");
    		    	        	map.put("Pseudo", json_data.getString("name"));
    		    	        	map.put("Score", Integer.toString(json_data.getInt("score")));
    		    	        	map.put("Date", json_data.getString("date"));
    		    	        	fillMaps.add(map);
     
     
    		             }
     
    		          adapter = new SimpleAdapter(this, fillMaps, R.layout.grid_item, from, to);
    Et à la fin de mon asynctask (lv étant la listview concernée) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    		       if(connexion)
    		       {
    		          lv.setAdapter(adapter);
    		          ((Button) findViewById(R.id.changer_highscore)).setText(getString(R.string.Changer_Highscore2));
     
    		       }
    Si vous avez des idées, je suis preneur !

  8. #8
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    Bonjour,

    Au lieu de recharger ta liste avec un nouvel adapter , il faudrait seulement que tu changes les données de celui ci puis tu notifies à cet Adapteur le changement de donnée via cette fonction notifyDataSetChanged

    http://developer.android.com/referen...taSetChanged()

    Par contre je ne sais pas comment modifier les données passé à un SimpleAdapter il faudrait regarder dans le code sinon passes par un BaseAdapter cela sera plus facile pour gérer les données

    Edit :
    Vu le code http://grepcode.com/file/repository....Adapter.0mData cela tu peux passer par une BaseAdapter sinon il faut que tu surcharges le SimpleAdapter pour accéder au mData via un setter puis un notify ce qui en soit est rapide à faire et pas compliqué .

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 62
    Par défaut
    Ce n'est pas très propre, mais j'ai réussi à réaliser ce que je voulais en passant la variable fillMaps sur toute mon activity (de quoi décider quand elle doit être modifiée) et en effectuant ensuite un setPosition pour la placer au bon niveau.

  10. #10
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2012
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2012
    Messages : 100
    Par défaut
    Bonjour,

    Je voulais savoir comment tu as resolus ton problème sur le chargement de la listview quand on arrive en bas de la liste, qui chargera la suite de la liste

  11. #11
    Modérateur
    Avatar de MasterMbg
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 719
    Par défaut
    Salut,
    Citation Envoyé par wangi Voir le message
    Bonjour,

    Je voulais savoir comment tu as resolus ton problème sur le chargement de la listview quand on arrive en bas de la liste, qui chargera la suite de la liste

    Le sujet datant de plusieurs années, je te conseillerais de créer ton post et de poser clairement ton problème.


    Christian Djo,
    Plus tu apprends sérieusement, plus tu te rapproches d'un savoir noble. Une chose est certaine, les difficultés ne s'écarteront de ton chemin...

    Tu es nouveau dans le développement Android, la page des COURS est là pour te faciliter la vie
    Tu peux trouver la réponse à ta question dans la FAQ
    Retrouvez mon tutoriel sur la consommation des services web SOAP
    Pense à voter positivement en appuyant sur en bas à droite de la réponse qui t'a donné une piste de solution.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Chargement asynchrone dans une listView
    Par Invité dans le forum C#
    Réponses: 9
    Dernier message: 25/07/2013, 17h34
  2. Chargement progressif information ListView
    Par italia57 dans le forum Composants graphiques
    Réponses: 4
    Dernier message: 22/08/2012, 16h21
  3. Problème de chargement d'une listView dans un thread
    Par Jérémy Lefevre dans le forum Composants graphiques
    Réponses: 3
    Dernier message: 12/10/2011, 17h27
  4. Chargement des images dans une ListView
    Par loudo dans le forum Composants graphiques
    Réponses: 0
    Dernier message: 09/05/2010, 22h03
  5. chargement dans une listview
    Par k_boy dans le forum VC++ .NET
    Réponses: 3
    Dernier message: 04/12/2006, 13h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo