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 :

AsynkTask listView ArrayList


Sujet :

Composants graphiques Android

  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 AsynkTask listView ArrayList
    Bonjour,

    Je me retrouve face à un problème, je charge un fichier Excel et celui ci met un petit moment avant de se charger et de s'afficher, pour que l'utilisateur ne pense pas que l'application ait buguer, j'aimerai afficher un progressDialog ( idéalement une progressBar mais je verrais par la suite) pendant que le fichier se charge.

    J'arrive à afficher le progressDialog, celui ci reste plus ou moins de temps en fonction de la taille de mon fichier Excel, mais par la suite rien ne s'affiche, qu'une page blanche.

    Merci de votre aide.

    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
     
     
    public class DisplayMyCoProd extends Activity {
     
        ArrayList<Locom> myList;
        LocomAdpater dataAdapter;
        ListView listView;
        String pathFile;
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            requestWindowFeature(Window.FEATURE_PROGRESS);
            setContentView(R.layout.display_my_co_prod);
     
            myList = new ArrayList<Locom>();
     
            Intent intent = getIntent();
            pathFile = intent.getStringExtra("EXTRA_pathFile");
     
            TextView txtv = (TextView)findViewById(R.id.textView);
            txtv.setText(pathFile);
     
            dataAdapter = new LocomAdpater(this, myList);
     
            listView = (ListView) findViewById(R.id.display_listview);
            listView.setAdapter(dataAdapter);
     
            listView.setOnItemClickListener(new ItemListView());
     
            new MyTask().execute();
     
        }
     
     
        class MyTask extends AsyncTask<Void, Void, Void> {
     
            ProgressDialog progressDialog;
            private LocomAdpater adapter;
     
            @Override
            protected void onPreExecute() {
                adapter = (LocomAdpater)listView.getAdapter();
                progressDialog = ProgressDialog.show(DisplayMyCoProd.this, "Chargement en cours", "Veuillez patienter...", false, false);
     
            }
     
            @Override
            protected Void doInBackground(Void... params) {
                try {
                    AssetManager am = getAssets();
                    InputStream is = am.open(pathFile);
                    Workbook wb = Workbook.getWorkbook(is);
                    Sheet sheet = wb.getSheet(0);
                    int row = sheet.getRows();
                    int col = sheet.getColumns();
     
                    String xx = "";
     
                    for (int i = 13; i < row; i++) {
                        Locom locom;
                        locom = new Locom("Engin","Visite");
     
                        for (int c = 1; c < col; c++) {
                            Cell cell = sheet.getCell(c,i);
     
                            switch (c) {
                                case 1:
                                    locom.setVisite(cell.getContents());
                                    break;
                                case 2:
                                    locom.setEngin(cell.getContents());
                                    break;
                                default:
                                    break;
                            }
                            xx = xx + cell.getContents();
                        }
                        myList.add(locom);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
                return null;
            }
     
          /*  @Override
            protected void onProgressUpdate(ArrayList<Locom>... values) {
                adapter.add(values[0]);
                count++;
                setProgress((int)(((double))));
            }*/
     
            @Override
            protected void onPostExecute(Void aVoid) {
     
                progressDialog.dismiss();
                Toast.makeText(DisplayMyCoProd.this,"Chargement réussi !", Toast.LENGTH_LONG).show();
            }
        }
     
        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();
     
                Toast.makeText(DisplayMyCoProd.this,engin +" : "+ visite, Toast.LENGTH_SHORT).show();
     
                Intent ChoixDMCPActivity = new Intent(DisplayMyCoProd.this, ChoixDMCP.class);
                ChoixDMCPActivity.putExtra("EXTRA_TV_E",engin);
                ChoixDMCPActivity.putExtra("EXTRA_TV_V",visite);
                startActivity(ChoixDMCPActivity);
            }
        }
    }

  2. #2
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Par défaut
    De ce que je lis, c'est normal : tu lances ton AsyncTask pour chopper les infos, tu les mets dans tes attributs après avoir initialisé l'adapter, et fin.
    Mets à jour ton adapter (et non ton ad pater ) et notifie la liste que celle-ci s'est vue modifiée.
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels 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
    Citation Envoyé par Hizin Voir le message
    De ce que je lis, c'est normal : tu lances ton AsyncTask pour chopper les infos, tu les mets dans tes attributs après avoir initialisé l'adapter, et fin.
    Mets à jour ton adapter (et non ton ad pater ) et notifie la liste que celle-ci s'est vue modifiée.
    Salut Hizin, tout d'abord merci de ta réponse,

    Malheureusement, j'ai beau cherché je ne comprend pas quand tu me dis mets à jour ton adapter, j'ai un peu de mal avec la class AsyncTask :/

  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
    L'AsyncTask est mal utilisée. Tu devrais par exemple avoir protected ArrayList<Locom> doInBackground(Void... params) { }, et il manque une méthode de callback populate() dans la ListActivity.
    Bref, suit scrupuleusement ce tuto : http://olegoaer.developpez.com/tutos...id/rpc/#LIII-B (sauf que toi c'est encore plus simple car tu n'as pas besoin de faire des appels réseau...)
    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
    Citation Envoyé par Hephaistos007 Voir le message
    L'AsyncTask est mal utilisée. Tu devrais par exemple avoir protected ArrayList<Locom> doInBackground(Void... params) { }, et il manque une méthode de callback populate() dans la ListActivity.
    Bref, suit scrupuleusement ce tuto : http://olegoaer.developpez.com/tutos...id/rpc/#LIII-B (sauf que toi c'est encore plus simple car tu n'as pas besoin de faire des appels réseau...)
    Merci pour ton lien, je vous tiens au courant

  6. #6
    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
    Merci ça marche quasiment à la perfection mais je ne comprend pas pourquoi le progressDialog réaparait des que je pars et je reviens dans l'application

  7. #7
    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
    Citation Envoyé par kader15 Voir le message
    des que je pars et je reviens dans l'application
    Parce que l'AsyncTask est lancé dans onStart(). Ce choix est expliqué en début de tuto.
    Dans ton cas, déplaces simplement le code dans onCreate().
    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

  8. #8
    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
    Citation Envoyé par Hephaistos007 Voir le message
    Parce que l'AsyncTask est lancé dans onStart(). Ce choix est expliqué en début de tuto.
    Dans ton cas, déplaces simplement le code dans onCreate().
    Ah oui effectivement,
    L'instanciation du RPC est réalisée ici dans onStart() de sorte que chaque fois que l'écran prend le focus, l'appel distant est déclenché : idéal pour être certain d'avoir des données fraîches. Bien sûr, vous pouvez déplacer cette instruction ailleurs.
    Je vous remercie infiniment, ça marche nickel

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

Discussions similaires

  1. Problème de ListView avec une ArrayList d'objets
    Par zouky dans le forum Composants graphiques
    Réponses: 1
    Dernier message: 24/08/2012, 00h40
  2. afficher une arraylist dans une listview
    Par ninolf dans le forum VB.NET
    Réponses: 3
    Dernier message: 17/05/2008, 12h02
  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