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 :

notifyDataSetChanged - update listview


Sujet :

Composants graphiques Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de kader15
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2016
    Messages : 65
    Par défaut notifyDataSetChanged - update listview
    Bonjour à tous,

    Voilà j'ai une class "Locom" qui comporte un numéro d'engin, le nom de la visite et l'etat.

    Le numéro d'engin et la visite sont des données directement importées d'un fichier excel que j'affiche dans une listview. En ce qui concerne l'état j'aimerai le changer en fonction du choix de l'utilisateur. Je m'explique:

    'Engin' 'Visite' 'Etat'

    L'utilisateur clique sur une ligne et a le choix entre 'En cours de réalisation' ou 'Terminée', suivant son choix lorsque je reviens à ma listview je dois voir afficher, par exemple:

    'Engin' 'Visite' 'En cours de réalisation'

    Je n'arrive pas à mettre à jour ma listview, si quelqu'un peut m'aider, please.

    Voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
                                lv = (ListView)findViewById(R.id.display_listview);
                                tv = (TextView)findViewById(R.id.tv_etat);
     
                                ArrayList<Locom> myList = new ArrayList<Locom>();
                                LocomAdpater dataAdapter = new LocomAdpater(HMoment.this, myList);
                                lv.setAdapter(dataAdapter);
     
                                String name = "aaa";
     
                                tv.setText(name);
     
                                dataAdapter.notifyDataSetChanged();

  2. #2
    Membre Expert
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Par défaut
    Parce que les changements doivent être fait sur les données de l'ArrayList (c-a-d les objets de type Locom), et pas sur les éléments à l'écran. Ça c'est le boulot de notifySetDataChanged() qui se débrouille ensuite.
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  3. #3
    Membre confirmé Avatar de kader15
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2016
    Messages : 65
    Par défaut
    Salut Hephaistos007 merci pour ta réponse,

    J'arrive a ajouter une nouvelle ligne mais je n'arrive pas à en modifier une, j'ai essayer avec set mais je n'arrive pas à obtenir la position, j'obtiens une erreur voici mon code :

    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
    ArrayList<Locom> myList = new ArrayList<Locom>();
                                Locom locom = new Locom(engin,visite,motif);
     
                                LocomAdpater dataAdapter = new LocomAdpater(HMoment.this, myList);
     
                                ListView lv = (ListView)findViewById(R.id.display_listview);
                                int position = lv.getSelectedItemPosition();
     
                                myList.clear();
                                myList.set(position,locom);
                                dataAdapter.notifyDataSetChanged();
     
                                Intent returnIntent = new Intent();
                                returnIntent.putParcelableArrayListExtra("ETATRESULT",myList);
                                setResult(Activity.RESULT_OK,returnIntent);

    Stack trace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    09-21 20:53:44.340 15279-15279/com.mycoprod.akhetib.mycoprod E/AndroidRuntime: FATAL EXCEPTION: main
                                                                                   java.lang.NullPointerException
                                                                                       at com.mycoprod.akhetib.mycoprod.HMoment$26.onClick(HMoment.java:962)
                                                                                       at android.view.View.performClick(View.java:4475)
                                                                                       at android.view.View$PerformClick.run(View.java:18786)
                                                                                       at android.os.Handler.handleCallback(Handler.java:730)
                                                                                       at android.os.Handler.dispatchMessage(Handler.java:92)
                                                                                       at android.os.Looper.loop(Looper.java:176)
                                                                                       at android.app.ActivityThread.main(ActivityThread.java:5419)
                                                                                       at java.lang.reflect.Method.invokeNative(Native Method)
                                                                                       at java.lang.reflect.Method.invoke(Method.java:525)
                                                                                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046)
                                                                                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862)
                                                                                       at dalvik.system.NativeStart.main(Native Method)

  4. #4
    Membre Expert
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Par défaut
    Je ne sais pas pourquoi tu montres ce bout de code en particulier alors que tu as une NullPointerException dans la méthode onClick(). Montres tout.
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  5. #5
    Membre confirmé Avatar de kader15
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2016
    Messages : 65
    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
    iv_valider.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    String enginForm = engin;
                    String subject = "MyCoProd en direct !";
                    String signatureMail = "MyCoProd,\n" +
                            "NB : Ce message vous est adressé automatiquement. Merci de ne pas y répondre.\n";
     
                    if(cb_enAvance.isChecked()) {
                        String statut = "En avance";
                        String visiteForm = "EN AVANCE : " + visite;
     
                        if (choix1.isChecked()) {
                            String cause = "Engin priorisé" + "\n" + et_ra_ec.getText().toString() + et_motifInconnu.getText().toString();
                            String message = "Attention le train : " + enginForm + "\n\n" +
                                    "Statut  : " + statut + "\n\n" +
                                    "Opération de maintenance : " + visite + "\n\n" +
                                    "N'a pas pu être traité pour la cause suivante : \n" + cause + "\n\n\n" +
                                    signatureMail;
                            if (masteris.isChecked()) {
                                String motif = "MASTERIS";
                                Envoie_Mail(subject, message);
                                excelModifier(titleFile, enginForm, visiteForm, cause, motif);
     
     
     
                                ArrayList<Locom> myList = new ArrayList<Locom>();
                                Locom locom = new Locom(engin,visite,motif);
     
                                LocomAdpater dataAdapter = new LocomAdpater(HMoment.this, myList);
     
                                ListView lv = (ListView)findViewById(R.id.display_listview);
                                int position = lv.getSelectedItemPosition();
     
                                myList.clear();
                                myList.set(position,locom);
                                dataAdapter.notifyDataSetChanged();
     
                                Intent returnIntent = new Intent();
                                returnIntent.putParcelableArrayListExtra("ETATRESULT",myList);
                                setResult(Activity.RESULT_OK,returnIntent);

    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
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    package com.mycoprod.akhetib.mycoprod;
     
    import android.app.Activity;
    import android.content.Intent;
    import android.content.SharedPreferences;
    import android.os.Bundle;
    import android.view.Gravity;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.AdapterView;
    import android.widget.ListView;
    import android.widget.SearchView;
    import android.widget.TextView;
    import android.widget.Toast;
     
    import java.util.ArrayList;
     
    public class DisplayMyCoProd extends Activity {
     
        public static final String POS_EXCEL = "posExcel";
        public static final String RETOUR = "retourArriere";
     
        static final int ETATRESULT = 1;  // The request code
     
     
        static int ligneMasteris = 16, ligneSLE = 16,ligneSLT = 16, lignePACA = 16, ligneThionville = 38, ligneINFRA = 38;
        static int ligneAppros = 38,lignePlanification = 38,ligneMethodes = 60,ligneCopro = 60,ligneMOD = 60,ligneInstallationsOutillages = 60,ligneRAEC = 82,ligneMotifInconnu = 82;
        static int cptRdvOK = 0;
     
        TextView txtv;
        String pathFile;
     
        public ArrayList<Locom> myList;
     
        LocomAdpater dataAdapter;
        ListView listView;
        SearchView sv;
     
        static boolean i = true;
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.display_my_co_prod);
     
            Intent intent = getIntent();
            pathFile = intent.getStringExtra("EXTRA_pathFile");
     
            txtv = (TextView) findViewById(R.id.textView);
            txtv.setText(pathFile);
     
            listView = (ListView) findViewById(R.id.display_listview);
            sv = (SearchView) findViewById(R.id.searchView);
     
            myList = new ArrayList<Locom>();
            dataAdapter = new LocomAdpater(this, myList);
     
            listView.setAdapter(dataAdapter);
     
            listView.setOnItemClickListener(new ItemListView());
     
     
            DownLoadExcel dlExcel = new DownLoadExcel(DisplayMyCoProd.this, pathFile);
            dlExcel.execute();
     
            sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
                @Override
                public boolean onQueryTextSubmit(String text) {
                    return false;
                }
     
                @Override
                public boolean onQueryTextChange(String query) {
                    dataAdapter.getFilter().filter(query);
                    return false;
                }
            });
        }
     
        public void populate(ArrayList<Locom> locom) {
            //this.dataAdapter.clear();
            this.dataAdapter.addAll(locom);
            this.dataAdapter.notifyDataSetChanged();
        }
     
     
        private class ItemListView implements AdapterView.OnItemClickListener {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
     
                ViewGroup vg = (ViewGroup) view;
                TextView tv_e = (TextView) vg.findViewById(R.id.tv_engin);
                TextView tv_v = (TextView) vg.findViewById(R.id.tv_visite);
     
                String engin = tv_e.getText().toString();
                String visite = tv_v.getText().toString();
     
                if (engin.equals("") || visite.equals("")) {
                    //DO NOTHING
                    Toast.makeText(DisplayMyCoProd.this, "Aucun élément sélectionné !", Toast.LENGTH_SHORT).show();
     
                } else {
                    Toast toast = Toast.makeText(DisplayMyCoProd.this, engin + " : " + visite, Toast.LENGTH_SHORT);
                    toast.setGravity(Gravity.TOP | Gravity.LEFT, 0, 0);
                    toast.show();
     
     
     
                    Intent ChoixDMCPActivity = new Intent(DisplayMyCoProd.this, HMoment.class);
                    ChoixDMCPActivity.putExtra("EXTRA_PATHFILE", pathFile);
                    ChoixDMCPActivity.putExtra("EXTRA_TV_E", engin);
                    ChoixDMCPActivity.putExtra("EXTRA_TV_V", visite);
                    ChoixDMCPActivity.putExtra("POSITION", position);
                    Toast.makeText(DisplayMyCoProd.this, "position = "+position, Toast.LENGTH_SHORT).show();
                    Toast.makeText(DisplayMyCoProd.this, "id="+id, Toast.LENGTH_SHORT).show();
                    startActivityForResult(ChoixDMCPActivity, ETATRESULT);
     
                }
            }
        }
     
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            if (requestCode == ETATRESULT) {
                if (resultCode == Activity.RESULT_OK) {
     
                    Bundle bundle = data.getExtras();
                    ArrayList<Locom> myListComReturned = bundle.getParcelableArrayList("ETATRESULT");
                    populate(myListComReturned);
     
                    System.out.println("ArrayList RESULT OK");
                } else if (resultCode == 0) {
                    System.out.println("ArrrayList RESULT CANCELLED");
                }
            }
        }
     
    }
    Voilà, c'était parceque le fichier est assez volumineux ^^

  6. #6
    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
    Bonjour,

    Ce que tu n'arrives pas à faire c'est modifier l'élément sélectionné dans la listView?

    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.

Discussions similaires

  1. Update listview depuis une activité
    Par kader15 dans le forum Composants graphiques
    Réponses: 17
    Dernier message: 18/04/2016, 09h37
  2. Réponses: 2
    Dernier message: 12/08/2015, 16h43
  3. [AC-2003] Windows Update & Listview/Treeview (problème)
    Par cactus38 dans le forum VBA Access
    Réponses: 6
    Dernier message: 05/09/2012, 09h34
  4. notifyDataSetChanged ne rafraîchit pas ma ListView
    Par Drlord dans le forum Composants graphiques
    Réponses: 2
    Dernier message: 08/03/2012, 18h08
  5. [c#] ListView affichant des images updates en temps reel
    Par elguignardo dans le forum Windows Forms
    Réponses: 1
    Dernier message: 10/05/2006, 11h49

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