2011-04-27 3 views
1

J'utilise simple ProgressDialog que la course ok mais la roue dose progresse pas:ProgressDialog de travail, mais ne progresse pas dans l'icône (roue)

//Progress Dialog 
      final ProgressDialog dialog = ProgressDialog.show(TravelPharm.this, "Searching","Please wait ...", true); 
      ((ProgressDialog) dialog) 
      .setProgressStyle(ProgressDialog.BUTTON_NEUTRAL); 

      final Handler handler = new Handler() { 
         public void handleMessage(Message msg) { 
          dialog.dismiss(); 
          } 
         }; 
        Thread checkUpdate = new Thread() { 
         public void run() { 

          handler.sendEmptyMessage(0); 
          } 
         }; 
        checkUpdate.start(); 

ce que je suis absent ??

Répondre

1

Créez votre dialogue de progression comme ceci:

final ProgressDialog progress = new ProgressDialog(context);

ajouter un texte/icône pour elle:

progress.setTitle("Loading"); 
progress.setMessage("Loading, please wait"); 
progress.setIcon(R.drawable.icon); 

Montrez-le:

progress.show();

+0

J'essaye votre solution sa dose encore ne fonctionne pas la roue reste immobile – joula

0

Je pense que vous devrait passer ProgressDialog.STYLE_SPINNER à la méthode ProgressDialog.setProgressStyle().

0
final ProgressDialog dialog = ProgressDialog.show(TravelPharm.this, "Searching","Please wait ...", true); 

La façon dont vous créez la ProgressDialog est correcte - si la fileuse ne tourne pas alors quelque chose bloque votre thread d'interface utilisateur. Par souci, pourquoi utilisez-vous TravelPharm.this pour le contexte au lieu de this? Je ne suis pas sûr que ce soit la cause de votre problème, je me demande juste pourquoi.

+0

Parce que si j'écris juste ceci je reçois une erreur. – joula

0

Je suppose que vous lancez une tâche qui demande beaucoup de temps à partir d'une boîte de dialogue, puis piégeant la sortie du fil dans votre gestionnaire lorsque vous essayez de fermer la boîte de dialogue. Si possible, pensez simplement à envoyer un message vide lorsque la boîte de dialogue est terminée. Ensuite, dans le gestionnaire créer un nouveau AsyncTask comme:

private class MyAsynch extends AsyncTask<String, Void, String>{ 
     protected void onPreExecute() { 
      resetProgress(); 
      progress.show(); 
     } 
     @Override 
     protected String doInBackground(String...strings) { // <== DO NOT TOUCH THE UI VIEW HERE 
      // TODO Auto-generated method stub 
      doNonUIStuff(); 
      return someString; // <== return value String result is sent to onPostExecute 
     } 
     protected void onPostExecute(String result){ 
      progress.dismiss(); 
      doSomethingWithString(result); // you could launch results dialog here 
     } 
    }; 
protected void onPause() { 
     super.onPause(); 
     if (asynch != null) {asynch.cancel(true);} 
     if (progress != null){progress.cancel();} 
    } 

    private void resetProgress() { // avoid frozen progress dialog on soft kill 
     if (progress != null && progress.isShowing()){ 
      progress.cancel(); 
     } 
     progress= new ProgressDialog(this); 
     progress.setIndeterminate(true); 
     progress.setMessage("I am thinking."); 
    } 

Vous pouvez retourner tout type dans onPostExecute, dans cet exemple, je retourne une chaîne. Une autre approche consiste à lancer une seconde activité en tant que "dialogue" en utilisant startActivityForResult pour créer la tâche AsycnTask dans onActivityResult. En d'autres termes, rassemblez les données dans une boîte de dialogue ou une seconde activité, puis dans la première activité, affichez une boîte de dialogue de progression dans onPreExecute, exécutez la tâche intensive en arrière-plan et annulez la boîte de dialogue de progression dans onPostExecute.

J'ai vu la bille tournante gelée, donc l'appel à resetProgress().