2010-11-17 34 views
10

Tôi muốn thực hiện hộp thoại tiến trình giả xuất hiện trong 2 hoặc 3 giây. Nó sẽ không thực sự làm bất cứ điều gì khác hơn là nói phát hiện. Tôi có mã:Thêm thời gian trễ vào Hộp thoại Progress

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

    dialog.dismiss(); 

Nhưng tôi phải đặt gì ở giữa chương trình và việc loại bỏ để hộp thoại xuất hiện trong vài giây? Cảm ơn!

Trả lời

48

Cách đúng - nó không chặn chính của bạn chủ đề, vì vậy giao diện người dùng vẫn đáp ứng:

dialog.show(); 

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

Great câu trả lời, chỉ cần bạn đang thiếu một cú đúp xoăn bổ sung trước khi dòng cuối cùng: }} , 3000); // 3000 miliseconds – DEzra

+0

xin lỗi! cách chúng tôi có thể cập nhật hộp thoại của chúng tôi trên tiến trình trong khi chờ đợi. ví dụ: 5 giây ... 4 giây ... 3 giây ... 2 giây ... 1 giây ... BOOOOM! và loại bỏ –

0

Không có gì xảy ra giữa việc loại bỏ và hiển thị .. thời gian tùy thuộc vào bạn. Ví dụ hộp thoại sẽ hiển thị trước khi truy cập máy chủ và nó sẽ bỏ nhận được kết quả có nghĩa

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

Nếu bạn cần chậm trễ rỗng có nghĩa là sau đó sử dụng cuộc gọi CountDownTimer giữa ..

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

Bạn cũng có thể sử dụng CountDownTimer của Android đó là hiệu quả hơn so với bất kỳ giải pháp khác được đăng và tôi t cũng hỗ trợ kích hoạt trong khoảng thời gian thường xuyên thông qua phương thức onTick().

Hãy nhìn vào ví dụ này,

new CountDownTimer(3000, 1000) { 

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

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

Đây chính xác là những gì tôi cần, chức năng của Hanlder không thể sử dụng trong Leanback: D –

1

Bạn có thể làm một cái gì đó như thế này:

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(); 
Các vấn đề liên quan