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 :

Progress bar entre deux activités


Sujet :

Android

  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2004
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Novembre 2004
    Messages : 24
    Points : 10
    Points
    10
    Par défaut Progress bar entre deux activités
    Salut à tous,

    Je développe une appli qui récupere des infos d'une base mysql distante (site web)
    Quand j'ouvre une activity, cca execute un script php sur mon serveur qui me renvoie les données à afficher en format json.

    Ce traiement peut prendre quelques secondes, et j'aimerais donc afficher un loading screen ou une progress bar le temps de charger ma deuxieme activity.

    Concretement j'ai un bouton qui appelle l'activity en question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    OnClickListener Button1 = new OnClickListener()
            {
     
            	public void onClick(View actuelView1)
            	{
     
            		// On met en place le passage entre les deux activités sur ce Listener
            		Intent intent = new Intent(MainActivity.this, ListEntriesActivity.class);
            	 	startActivity(intent);
     
            	 }
     
            };
    Puis sur le onCreate de ma seconde activity, je balance les fonctions de récupération et mise en forme des données, puis les affiche.

    Concrêtement lorsque je clique sur le bouton qui lance la deuxieme activity, il se s'écoule 2-3 secondes sans que visuellement rien ne se passe, puis ensuite j'ai un écran noir de plusieurs secondes, et enfin mon activity s'affiche.


    Pour mettre en place une progress bar au dessus de tout ça, j'ai lu qu'il fallait la mettre dans un thread séparé et faire des actions en "PreExecute" et "PostExecute".

    J'avoue que j'ai du mal à saisir le truc et à le mettre en oeuvre pour moi même.

    Pouvez vous éclairer ma lanterne ?

    Merci à vous.

    VeeTouine

  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
    En fait, il ne faut pas voir les activity comme de simples interface de fenetres, ce sont de petits programmes indépendants.
    Donc tout va se jouer dans l'activity "ListEntriesActivity"

    Voici le pattern que j'utilisais avant les "Loader" de Honeycomb:
    A noter le "startDataLoading()" séparé (ce qui permet d'avoir un bouton "refresh" dans l'ui).
    Le cancel, La gestion des erreurs

    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
     
    class ListEntriesActivity extends Activity
    {
           public void onCreate()
           {
                ...
                startDataLoading();
           }
     
           public void onDataLoaded(DATA d)
           {
                ... refresh UI ...
     
           }
           public void onDataLoadError(String error)
           {
                ... show error ? ....
     
           }
     
           public void onDestroy()
           {
                cancelDataLoading();
           }
     
           public void cancelDataLoading()
           {
                if (this.dataLoader != null)
                    this.dataLoader.cancel();
           }
     
           public void startDataLoading()
           {
                if (this.dataLoader == null) {
                    showProgress();
                    this.dataLoader = new DataLoadingTask();
                    this.dataLoader.execute();
                }
           }
     
           public void showProgress(int v)
           {
                // display a progress icon somewhere to notify background loading
           }
           public void hideProgress()
           {
               // hide the progress icon
           }
     
           public class DataLoadingTask extends AsyncTask<?,DATA,?>
           {
                 String error;
     
                 public void onPreExecute()
                 {
                       ListEntriesActivity.this.showProgress(0);
                 }
     
                 public DATA doInBackground()
                 {
                       DATA d = ..... ; 
                       try {
                            // loading of the data
                       } catch (Exception ex) {
                           this.error = ....
                       }
                       return d;
                 }
     
                 public void onPostExecute(DATA d)
                 {
                       ListEntriesActivity.this.dataLoader = null;
                       if (d != null)
                           ListEntriesActivity.this.onDataLoaded(d);
                       else if (this.error != null)
                           ListEntriesActivity.this.onDataLoadError(this.error);
                       ListEntriesActivity.this.hideProgress();
                 }
           }
    }
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

Discussions similaires

  1. Réponses: 2
    Dernier message: 30/07/2014, 16h51
  2. [XL-2003] Progress bar + rercherche d'une ligne selon deux critères (sur plusieurs feuilles)
    Par khroutchev dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 18/07/2013, 12h10
  3. Ecran noir entre deux activités.
    Par valoo86 dans le forum Android
    Réponses: 4
    Dernier message: 04/06/2012, 09h24
  4. Réponses: 4
    Dernier message: 03/02/2011, 10h56
  5. [Activité] mapping entre deux diagrammes d'activité
    Par Smix007 dans le forum Autres Diagrammes
    Réponses: 8
    Dernier message: 13/07/2008, 19h40

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