web-dev-qa-db-ja.com

進行状況ダイアログに遅延を追加する

ダミーの進行状況ダイアログを2、3秒間表示させたい。実際には、検出と言う以外のことは何もしません。私はコードを持っています:

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

    dialog.dismiss();

しかし、私はショーと、ダイアログを数秒間表示させるための解雇の間に何を入れますか?ありがとう!

15
Sapp

正しい方法-メインスレッドをブロックしないため、UIは応答性を維持します。

dialog.show();

Handler handler = new Handler();
handler.postDelayed(new Runnable() {
    public void run() {
        dialog.dismiss();
    }
}, 3000); // 3000 milliseconds delay
55
Peter Knego
        progress.setProgress(100);
        Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            public void run() {
                pdialog.dismiss();
            }}, 3000);
3
joe

CountDownTimer of Androidを使用することもできます。これは、投稿された他のどのソリューションよりもはるかに効率的であり、fires on onTick()メソッドを介したregularinterval

この例を見てください、

 new CountDownTimer(3000, 1000) {

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

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

あなたはこのようなことをすることができます:

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();
1
codingpuss

却下と表示の間に何もありません..時間はあなた次第です。たとえば、サーバーにアクセスする前にダイアログが表示され、結果の取得が却下されます。

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

空の遅延が必要な場合は、その間にCountDownTimer呼び出しを使用します。

0
David

Xamarin.AndroidC#を使用)ソリューション(of Peter Knegoの答え)、これがその方法です:

new Handler().PostDelayed(() => { 
    dialog.dismiss();
}, 1000);
0
Mehdi Dehghani