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 :

Actualiser une ListView


Sujet :

Composants graphiques Android

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 9
    Points : 2
    Points
    2
    Par défaut Actualiser une ListView
    Bonjour à tous. D'ordinaire je me débrouille pour trouver réponses à mes questions sur votre forum, mais cette fois je suis assez bloqué et j'en fais appel à votre expérience. Je suis programmeur débutant sous android dans le cadre d'un projet et j'ai un petit soucis avec une ListView.

    En gros, j'ai:

    - Crée un objet Eleve qui a pour principaux champs un nom et un status (String)
    - Crée un tableau d'Eleves
    - A partir du tableau, crée un tableau de String[][] dans lequel je place le nom à gauche et le statut à droite
    - Insérer ce String dans un SimpleAdapter pour avoir le nom à gauche sur ma listview et le statut a droite.

    Jusque là tout va bien, j'ai ma liste, je peux défiler, sauf que, je voudrais que sur un clic sur un objet de ma liste, celui-ci passe du statut présent à absent. Je m'étais débrouiller avec une méthode un peu vite-fait, a chaque fois que je cliquer sur l'objet, je changeais son statut et je détruisais, récréais la liste. Le soucis avec cette méthode, c'est que si je déroule et que je clique, je reviens au début. J'aimerais savoir comment actualiser ma liste pour qu'elle change le statut tout seul? J'ai voulu essayer avec un invalidate, mais cela ne fonctionne pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
     
     
    	    		  if (ListeEleve[position].getPresentFlag() == false)
    	    		  {
    	    	    		  ListeEleve[position].setPresent();
    	    		  }
    	    	      else
    	    	      {
    	    	    	  ListeEleve[position].setAbsent();
    	    	      }
    	    	      AffEleve[position][1] = ListeEleve[position].get_Status();
    	    	      visual_update();
    	    	  }
    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
    public void visual_update()
        {
     
    		HashMap<String, String> content;
      		List<HashMap<String, String>> liste = new ArrayList<HashMap<String, String>>();
      		for (i=0;i<Promosize;i++)
    	    {						
        		content = new HashMap<String, String>();
        		content.put("text1", AffEleve[i][0]);
        		content.put("text2", AffEleve[i][1]);
        	    liste.add(content);
    	    }
      		Update = new SimpleAdapter(this,liste,R.layout.simple_list_custom,new String[] {"text1", "text2"},new int[] {android.R.id.text1, android.R.id.text2 });
        	Liste.setAdapter(Update);
        }
    Merci d'avance pour votre aide =).

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    757
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 757
    Points : 968
    Points
    968
    Par défaut
    C'est très simple :
    Après avoir fait une modification de ton modèle, il suffit de dire à l'adapter de se mettre à jour.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Update.notifyDataSetChanged();
    Un autre conseil, fais attention aux conventions de nommage du language Java : les variables sont écrites en CamelCase et commencent par une minuscule. C'est plus facile pour tout le monde de s'y retrouver

  3. #3
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    Merci de la réponse, je ferais attention à la convention pour le nommage à présent .

    Effectivement, ta solution me parait simple, chose que j'aurais du trouver seul en cherchant dans la doc java (je n'avais pas encore essayé, mais je viens de la trouver par hasard). Le soucis, c'est que lorsque j'appel cette méthode, Eclipse me soumet le problème : "The method notifyDataSetChanged() is undefined for the type ListAdapter" alors qu'update est bien un type SimpleAdapter? Quelque chose m'échappe?

    Eclipse propose d'ajouter un Cast BaseAdapter, mais le programme ne fonctionne pas avec ce fix.

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    757
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 757
    Points : 968
    Points
    968
    Par défaut
    L'objet SimpleAdapter ne permet d'afficher que des données statiques.
    C'est écrit à la première ligne de la doc http://developer.android.com/referen...leAdapter.html
    Il te faut donc utiliser un autre Adapter, ArrayAdapter par exemple.

  5. #5
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    Le soucis, c'est que j'avais débutais en ArrayAdapter mais avait du passer en SimpleAdapter pour permettre d'afficher non pas un mais deux String, pour que l'un soit aligné à droite et l'autre à gauche.

    J'ai cependant réussi à corriger mon soucis, après nombreuses recherches suite aux soucis précédents, avec la méthode listview.invalidateViews() (qui n'avait pas fonctionné lors de mon premier essai) et en ajoutant un .clear sur mon ArrayList.

    En tout cas merci pour le coup main qui m'a permis d'aller voir plus loin dans mon soucis et de trouver la solution =).

Discussions similaires

  1. Actualiser l'affichage d'une ListView
    Par karamovic dans le forum Composants graphiques
    Réponses: 7
    Dernier message: 22/05/2012, 20h28
  2. [C#] Surlignage d'un élement d'une ListView
    Par tontonplaisir dans le forum Windows Forms
    Réponses: 9
    Dernier message: 08/09/2004, 15h35
  3. [SWT] actualiser une fenêtre
    Par cootchy dans le forum SWT/JFace
    Réponses: 1
    Dernier message: 17/05/2004, 10h24
  4. [SWT] actualiser une fenêtre
    Par cootchy dans le forum SWT/JFace
    Réponses: 7
    Dernier message: 15/05/2004, 23h53
  5. [VB6] Supprimer un enregistrement dans une ListView ??
    Par Argonz dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 14/11/2002, 09h37

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