Frage

Ich versuche, eine ProgressDialog für einen Android-App (nur ein einfach man den Benutzer zeigt, dass Sachen geschehen, keine Knöpfe oder irgendetwas) zu schaffen, aber ich kann es nicht richtig machen. Ich war durch Foren und Tutorials sowie Sample-Code, der mit dem SDK kommt, aber ohne Erfolg.

Das ist, was ich habe:

    btnSubmit.setOnClickListener(new View.OnClickListener() {
      public void onClick(View view) {
        (...)
          ProgressDialog pd = new ProgressDialog(MyApp.this);
          pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
          pd.setMessage("Working...");
          pd.setIndeterminate(true);
          pd.setCancelable(false);

          // now fetch the results
          (...long time calculations here...)

          // remove progress dialog
          pd.dismiss();

Ich habe auch versucht, das Hinzufügen pd.show(); und messed um mit dem Parameter in new ProgressDialog in gar nichts daraus resultierenden (außer Fehlern, dass der gewählte Parameter wird nicht Arbeit), was bedeutet: die ProgressDialog wird nicht immer angezeigt. Die App gerade läuft weiter, als ob ich nie den Dialog hinzugefügt.

Ich weiß nicht, ob ich den Dialog an der richtigen Stelle bin zu schaffen, zog ich es ein wenig um, aber dass auch didnt't Hilfe. Vielleicht bin ich im falschen Kontext? Der obige Code ist innerhalb private ViewGroup _createInputForm() in MyApp.

Jeder Hinweis ist willkommen,

War es hilfreich?

Lösung

Sie haben pd.show aufrufen, bevor die lange Berechnung beginnt und dann muss die Berechnung in einem separaten Thread ausgeführt werden. Ein schnell wie dieser Thread beendet ist, haben Sie pd.dismiss () aufrufen, die prgoress Dialog zu schließen.

Hier können Sie sehen, ein Beispiel:

die progressdialog wird erstellt und angezeigt, und ein Thread aufgerufen wird, eine schwere Berechnung auszuführen:

@Override
    public void onClick(View v) {
       pd = ProgressDialog.show(lexs, "Search", "Searching...", true, false);
       Search search = new Search(   ...   );
       SearchThread searchThread = new SearchThread(search);
       searchThread.start();
    }

und hier das Thema:

private class SearchThread extends Thread {

        private Search search;

        public SearchThread(Search search) {
            this.search = search;
        }

        @Override
        public void run() {         
            search.search();
            handler.sendEmptyMessage(0);
        }

        private Handler handler = new Handler() {

            @Override
            public void handleMessage(Message msg) {
                displaySearchResults(search);
                pd.dismiss();
            }
        };
    }

Andere Tipps

Ich gebe Ihnen eine Lösung für sie, Versuche dies... Definieren Sie zunächst den Fortschrittsdialog in der Aktivität vor onCreate() Methode

private ProgressDialog progressDialog;

Jetzt im onCreate Methode haben Sie vielleicht die eine beliebige Taste klicken, auf dem Sie die Aktivität auf jede Aktion ändern. Nur setzt dort die Progress Bar.

progressDialog = ProgressDialog.show(FoodDriveModule.this, "", "Loading...");

Jetzt Thread verwenden, um die Fortschrittsleiste ein- und ausblenden zu behandeln

new Thread() 
{
    public void run() 
   {
       try
       {
           sleep(1500); 
           // do the background process or any work that takes time to see progress dialog
       }
       catch (Exception e)
       {
           Log.e("tag",e.getMessage());
       }
       // dismiss the progress dialog   
       progressDialog.dismiss();
    }
}.start();

Das ist alles!

Fortschrittsdialog zeigt nicht, weil Sie einen separaten Thread verwenden. Die besten Praktiken in Android verwenden AsyncTask (sehr empfehlenswert). Siehe auch dieses Antwort .

Dies ist auch möglich, mithilfe von AsyncTask . Diese Klasse erstellt einen Thread für Sie. Sie sollten es und füllen in der doInBackground(...) Methode Unterklasse.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top