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 :

Rafraîchir ListView [Débutant(e)]


Sujet :

Composants graphiques Android

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Août 2012
    Messages : 9
    Points : 7
    Points
    7
    Par défaut Rafraîchir ListView
    Bonjour à tous,

    J'ai un soucis pour rafraîchir ma listview. J'actualise ma liste, mais rien de s'affiche a l'écran..
    Le code parlera plus que moi je pense.

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    ....
    allTesteurs = DBManager.sharedManager().getTesteurs();
    activiteAdapter = new ArrayAdapter<String>(AjouterSessionTesteur.this,android.R.layout.simple_list_item_multiple_choice, allActivity);
    	    lvActivites.setItemsCanFocus(false);
    	    lvActivites.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
    	    lvActivites.setAdapter(activiteAdapter);
    	    lvActivites.setItemChecked(0, true);
    	    testeursAdapter = new TesteurAdapter(getApplicationContext(), allTesteurs);
    	    lvTesteurs.setAdapter(testeursAdapter);
     
    	    lvTesteurs.setOnItemClickListener(new OnItemClickListener() {
     
                public void onItemClick(AdapterView<?> parent, View item,
                        int position, long id)
                {
                    Testeur testeur = testeursAdapter.getItem(position);
                    testeur.toggleChecked();
                    TesteurViewHolder viewHolder = (TesteurViewHolder) item
                            .getTag();
                    viewHolder.getCheckBox().setChecked(testeur.isChecked());
                }
            });
    	    lvActivites.setOnItemClickListener(new OnItemClickListener() {
     
    			public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
    					long arg3) {
    				id_activite_select = arg2;
     
    				if (id_activite_select == 0){
    					allTesteurs.clear();
    					allTesteurs = DBManager.sharedManager().getTesteurs();
    					testeursAdapter.notifyDataSetChanged();
    				}
    				else {
    					allTesteurs.clear();
    					id_activite = id_activite_select+1;
    					allTesteurs = DBManager.sharedManager().getTesteurdByActivity(id_activite, tag);
    					testeursAdapter.notifyDataSetChanged();
     
    				}
    			}
    		});
    Merci d'avance, je galère depuis un moment la dessus.
    Cordialement.

  2. #2
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    J'ai du mal à comprendre le code...

    Mais bon, à vue de nez... on dirait que tu mets à jour ta liste interne de "allTesteurs" sans mettre à jour l'adapter...
    Pour des raisons de mutabilité, par exemple, après initialisation, le ArrayAdapter a fait une copie de la liste (d'ailleurs c'est plus une liste, c'est une array).

    Donc il faudrait le code de TesteurAdapter...

    Et si celui-ci est juste une extension de ArrayAdapter (ou autre SimpleAdapter), alors il faut lui passer la nouvelle liste à un moment ou a un autre.
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Août 2012
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    public class TesteurAdapter extends ArrayAdapter<Testeur>{
     
    	List<Testeur> testeur;
    	LayoutInflater	inflater;
     
     
     
    	public TesteurAdapter(Context context, List<Testeur> testeur)
        {
            super(context, R.layout.custom_listview_testeur, R.id.nom, testeur);
            // Cache the LayoutInflate to avoid asking for a new one each time.
            inflater = LayoutInflater.from(context);
        }
     
        @Override
        public View getView(int position, View convertView, ViewGroup parent)
        {
            // Planet to display
            Testeur testeur = (Testeur) this.getItem(position);
     
            // The child views in each row.
            CheckBox checkBox;
            TextView textView;
     
            // Create a new row view
            if (convertView == null)
            {
                convertView = inflater.inflate(R.layout.custom_listview_testeur, null);
     
                // Find the child views.
                textView = (TextView) convertView
                        .findViewById(R.id.nom);
                checkBox = (CheckBox) convertView.findViewById(R.id.checkBox);
     
                // Optimization: Tag the row with it's child views, so we don't
                // have to
                // call findViewById() later when we reuse the row.
                convertView.setTag(new TesteurViewHolder(textView, checkBox));
     
                // If CheckBox is toggled, update the planet it is tagged with.
                checkBox.setOnClickListener(new View.OnClickListener()
                {
                    public void onClick(View v)
                    {
                        CheckBox cb = (CheckBox) v;
                        Testeur testeur = (Testeur) cb.getTag();
                        testeur.setChecked(cb.isChecked());
                    }
                });
            }
            // Reuse existing row view
            else
            {
                // Because we use a ViewHolder, we avoid having to call
                // findViewById().
                TesteurViewHolder viewHolder = (TesteurViewHolder) convertView
                        .getTag();
                checkBox = viewHolder.getCheckBox();
                textView = viewHolder.getTextView();
            }
     
            // Tag the CheckBox with the Planet it is displaying, so that we can
            // access the planet in onClick() when the CheckBox is toggled.
            checkBox.setTag(testeur);
     
            // Display planet data
            checkBox.setChecked(testeur.isChecked());
            textView.setText(testeur.getNom());
     
            return convertView;
        }
     
    public Object onRetainNonConfigurationInstance()
    {
        return testeur;
    }
     
    }
    Voilà le code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    allTesteurs.clear();
    					allTesteurs = DBManager.sharedManager().getTesteurs();
    					testeursAdapter.notifyDataSetChanged();
    Ce que je fais là ne vide pas "alltesteur", la re remplis, et met l'adapter à jour avec "notifyDataSetChanged()" ?

  4. #4
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Oui c'est ce que je dis:

    Etat initial: testeursAdapter vide... allTesteurs vide
    * Tu récupère la liste des testeurs
    Etat 1: testeursAdapter vide... allTesteurs=(A,B,C)
    * Tu crée l'adapter
    Etat 2: testeursAdapter=(A,B,C)... allTesteurs=(A,B,C)
    * Tu mets a jour la liste des testeurs
    Etat 3: testeursAdapter=(A,B,C)... allTesteurs=(D,E,F)
    * Tu peux appeler "notifyDataSetChanged()" autant que tu le veux sur testeursAdapter, à un moment il faut lui dire: "les nouvelles données sont D,E,F" !
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Août 2012
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    "notifyDataSetChanged()" permet pas de lui indiqué que les données ont changées?

  6. #6
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Si mais comme ses données sont toujours (A,B,C) ça ne changera rien...

    Je vais essayer de faire court....
    La tu mix des features de ArrayAdapter (immutable list, getItem(), getCount(), ...) avec des trucs à toi (mutable data, getView() )

    Ou tu fais tout à toi (aucun interêt donc d'hériter de ArrayAdapter), et quand ta liste mutable change tu appels notifyDataSetChanged()

    Ou tu laisses ArrayAdapter gérer sa liste (immutable), mais dans ce cas il faut aller modifier *sa* liste interne avant d'appeler notifyDataSetChanged() (je crois d'ailleurs qu'il le fait tout seul dans certains cas).
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

Discussions similaires

  1. [Kylix] prob listview
    Par sdoura2 dans le forum EDI
    Réponses: 1
    Dernier message: 22/10/2002, 21h37
  2. Une gauge dans un ListView
    Par Thom@s dans le forum Composants VCL
    Réponses: 3
    Dernier message: 22/10/2002, 10h32
  3. listview ??
    Par Galdarion dans le forum Composants VCL
    Réponses: 2
    Dernier message: 12/09/2002, 17h02
  4. ListView->Items->Clear() !!! Qques probl de perf
    Par Nicolas_a69 dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/08/2002, 11h49
  5. ListView
    Par SnickeursMan dans le forum Composants VCL
    Réponses: 2
    Dernier message: 14/08/2002, 10h42

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