16

我想让一个虚拟进度对话框出现 2 或 3 秒。除了说检测之外,它实际上不会做任何事情。我有代码:

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

    dialog.dismiss();

但是我在节目和让对话出现几秒钟的解雇之间放了什么?谢谢!

4

6 回答 6

61

正确的方法 - 它不会阻塞你的主线程,所以 UI 保持响应:

dialog.show();

Handler handler = new Handler();
handler.postDelayed(new Runnable() {
    public void run() {
        dialog.dismiss();
    }
}, 3000); // 3000 milliseconds delay
于 2010-11-17T21:33:26.793 回答
3
        progress.setProgress(100);
        Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            public void run() {
                pdialog.dismiss();
            }}, 3000);
于 2012-09-03T14:59:40.203 回答
2

您还可以使用CountDownTimer比发布的任何其他解决方案更有效的 Android,它还支持通过其方法定期触发。onTick()

看看这个例子,

 new CountDownTimer(3000, 1000) {

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

     public void onFinish() {
         dialog.dismiss();
     }
  }.start();
于 2015-01-23T13:14:48.203 回答
1

你可以这样做:

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();
于 2015-12-20T18:56:08.033 回答
0

解雇和展示之间没有任何关系。时间取决于你。例如,对话框将在服务器访问之前显示,它会关闭获取结果的方式

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

如果您需要空延迟意味着然后在这之间使用 CountDownTimer 调用..

于 2010-11-17T21:26:34.010 回答
0

如果有人正在寻找Xamarin.Android使用 C#)解决方案(Peter Knego 的回答),方法如下:

new Handler().PostDelayed(() => { 
    dialog.dismiss();
}, 1000);
于 2018-04-16T05:23:37.263 回答