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

Android Discussion :

Gestion des ProgressBar


Sujet :

Android

  1. #1
    Membre du Club
    Homme Profil pro
    Cisco
    Inscrit en
    Juillet 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Cisco
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2012
    Messages : 71
    Points : 55
    Points
    55
    Par défaut Gestion des ProgressBar
    Bonjour,

    J'ai une tâche asynchrone liée a un bouton "Refresh";

    J’intègre ma ProgressBar de la façon suivante:
    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
    <?xml version="1.0" encoding="utf-8"?>
        <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:orientation="vertical"
            android:background="@color/grey">
             <Button     android:id="@+id/refresh_p"
                        android:text="@string/refresh_promo"
                        android:layout_width="fill_parent"
                        android:layout_height="wrap_content"
                        android:background="@drawable/custom_button1"/>
     
           <LinearLayout android:id="@+id/linearlayoutProgressBar"
                               android:layout_width="fill_parent"
                               android:layout_height="wrap_content"
                               android:gravity="center"/>
           <ListView
                android:id="@android:id/list"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:listSelector="@color/tabTransparent"
                android:cacheColorHint="#00000000"/>
              <!--   <ListView android:id="@+id/list_promo"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"/>-->
        </LinearLayout>
    Et mon AsyncTask :
    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
    @Override
            protected void onPreExecute() 
            {
                super.onPreExecute();
     
                pb = new ProgressBar(context);
                LinearLayout ll = (LinearLayout) ((Activity) context).findViewById(R.id.linearlayoutProgressBar);
                ll.addView(pb);
                pb.setVisibility(View.VISIBLE);
            }
     
            @Override
            protected void onPostExecute(ArrayList<HashMap<String, String>> promoList) 
            {
                ...
     
                if (pb!=null) 
                {
                    pb.setVisibility(View.GONE);
                    ((LinearLayout)pb.getParent()).removeView(pb);
                }
            }
    Quand j'appuie plusieurs fois sur le bouton "Refresh" et que ma tâche asynchrone n'a pas fini de charger, le problème est que plusieurs ProgressBar s'affichent à l'écran, tout en restant sur la même ligne.

    Voici quelques screenshots du rendu:

    J'aimerais que la ProgressBar se replace au même endroit.

    Quelqu'un saurait-il m'indiquer comment faire ?

    Merci d'avance pour votre aide.

  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
    Le but est quoi ?
    De n'avoir qu'une progress bar ?
    De n'avoir qu'une tache de refresh à la fois ?

    N'avoir qu'une seule tache est "relativement" simple:
    Dans l'activité stocker la tache de refresh genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    class MyActivity .... {
     
       private MyTask  refreshTask = null;
     
    }
    Quand on démarre la tache de refresh, on le fait avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if (refreshTask == null) {
        refreshTask = new MyTask();
        refreshTask.execute();
    }
    A la fin du refresh, quand l'activité est "rappelée", on fait simplement refreshTask=null;

    A noter que dans le onDestroy() du coup, on peut faire: refreshTask.cancel(); !

    Voilà, on n'a plus qu'une tache de refresh....

    Pour n'avoir qu'une progress bar, il faut juste implémenter un compteur:
    Au début:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (0 == progressCount++) {  progress.show(); }
    A la fin:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (0 == --progressCount) { profress.hide(); }
    Pour finir, pour empêcher simplement un double refresh, la solution que je préfère: remplacer le bouton qui lance le refresh, par la progress bar... plus de bouton, plus de double refresh possible....
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  3. #3
    Membre du Club
    Homme Profil pro
    Cisco
    Inscrit en
    Juillet 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Cisco
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2012
    Messages : 71
    Points : 55
    Points
    55
    Par défaut
    Merci Nicroman,

    a la base je voulais que ma nouvelle ProgressBar positionnée au centre se superpose avec l'ancienne ProgressBar positionnée elle aussi au centre..

    J'aimerais savoir pourquoi les ProgressBar ne se superposent pas (pourtant positionnée au meme endroit)?

    En tout cas merci pour tes méthodes, j'ai finalement utilisé la methode se résumant au simple fait de lancer qu'une tache a la fois, en stockant ma tache asynchrone et en la passant a Null a la fin de ma tache Async.

    Merci!

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

Discussions similaires

  1. gestion des groupes
    Par muaddib dans le forum QuickReport
    Réponses: 3
    Dernier message: 31/12/2002, 11h01
  2. [reseaux] Gestion des threads en perl
    Par totox17 dans le forum Programmation et administration système
    Réponses: 2
    Dernier message: 28/11/2002, 09h40
  3. Gestion des variables - mémoire ?
    Par RIVOLLET dans le forum Langage
    Réponses: 4
    Dernier message: 26/10/2002, 12h44
  4. Réponses: 4
    Dernier message: 04/07/2002, 12h31
  5. c: gestion des exceptions
    Par vince_lille dans le forum C
    Réponses: 7
    Dernier message: 05/06/2002, 14h11

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