Frage

Ich möchte ein Dummy-Fortschrittsdialog für 2 oder 3 Sekunden erscheinen. Es wird nicht wirklich etwas anderes als etwa Erfassungs tun. Ich habe den Code:

    ProgressDialog dialog = ProgressDialog.show(this, "", "Detecting...",
            true);
    dialog.show();

    dialog.dismiss();

Aber was setze ich zwischen der Show in, und die Entlassung der Dialog für einige Sekunden erscheinen zu lassen? Dank!

War es hilfreich?

Lösung

Der richtige Weg - es nicht Ihren Haupt-Thread blockieren, so UI bleibt ansprechbar:

dialog.show();

Handler handler = new Handler();
handler.postDelayed(new Runnable() {
    public void run() {
        dialog.dismiss();
    }
}, 3000); // 3000 milliseconds delay

Andere Tipps

        progress.setProgress(100);
        Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            public void run() {
                pdialog.dismiss();
            }}, 3000);

Sie können auch CountDownTimer von Android verwenden, die viel effizienter als jede andere Lösung geschrieben und es unterstützt auch Feuer auf regelmäßigen Intervall durch seine onTick() Methode.

Haben Sie einen Blick auf dieses Beispiel:

 new CountDownTimer(3000, 1000) {

     public void onTick(long millisUntilFinished) {
             // You don't need anything here
     }

     public void onFinish() {
         dialog.dismiss();
     }
  }.start();

Sie können etwas tun:

new AsyncTask<Void, Void, Void>
{
    ProgressDialog dialog = new ProgressDialog(MainActivity.this);
    @Override
    protected void onPreExecute() {
        super.onPreExecute();

        dialog.setTitle("Please wait");
        dialog.setMessage("Preparing resources...");
        dialog.setCancelable(false);
        dialog.show();
    }


    @Override
    protected Void doInBackground(Void... params) {
        try{
           Thread.sleep(3000);
        } 
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }

    @Override
    protected void onPostExecute(Void aVoid) 
    {
        super.onPostExecute(aVoid);
        if (dialog!=null && dialog.isShowing())
        {
            dialog.dismiss();
        }
    }
}.execute();

kommt nichts zwischen entlassen und zeigen .. die Zeit bei Ihnen abhängig. Zum Beispiel zeigt Dialog vor dem Serverzugriff und es wird entlassen Ergebnis bedeutet, dass man

 dialog.show();
 ServerCall();
 dialog.close();

Wenn Sie leere Verzögerungsmittel dann zwischen dem CountDownTimer Aufruf verwenden ..

Falls jemand für Xamarin.Android suchen ( mit C # ) Lösung ( Peter Knego Antwort ), ist hier, wie:

new Handler().PostDelayed(() => { 
    dialog.dismiss();
}, 1000);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top