2012-02-25 18 views
7

Vui lòng kiểm tra mã mẫu sau. Tin nhắn bánh mì nướng được hiển thị nhưng progressdialog không bao giờ bị ẩn. Tại sao?ProgressDialog.dismiss() không hoạt động

import android.app.Activity; 
import android.app.ProgressDialog; 
import android.os.Bundle; 
import android.os.Handler; 
import android.os.Message; 
import android.widget.Toast; 


public class LoadExamActivity extends Activity implements Runnable{ 
    ProgressDialog pd; 

    Handler Finished = new Handler(){ 
     @Override 
     public void handleMessage(Message msg){ 
      Toast.makeText(getApplicationContext(), "DONE!", Toast.LENGTH_SHORT).show(); 
      pd.dismiss(); 
     } 
    }; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.exam); 
     Toast.makeText(this, "START!", Toast.LENGTH_SHORT).show(); 
     pd = new ProgressDialog(this); 
     pd.show(this, "Waiting...", "Please wait five seconds..."); 
     Thread th = new Thread(this); 
     th.start(); 


    } 

    public void run() { 
     //To change body of implemented methods use File | Settings | File Templates. 
     for (int i = 0; i < 5; i++) 
     { 
      try 
      { 
       Thread.sleep(1000); 
      }catch(Exception e){} 
     } 
     Finished.sendEmptyMessage(0); 
    } 


} 

Sau năm giây "DONE" tin nhắn được hiển thị nhưng progressdialog không bị sa thải và thậm chí nếu tôi đặt pd.dismiss() ngay phía dưới Thr pd.show() Tôi sẽ không bỏ qua những progressdialog hai và tôi don 't biết tại sao điều này đang xảy ra và nó làm tôi phát điên!

Trả lời

23

Bạn hiện không sử dụng hộp thoại tiến trình. Bạn sẽ thấy IDE hiển thị một dấu hiệu cảnh báo nhỏ gọn bên cạnh dòng pd.show(...) của bạn.

Những gì bạn đang làm là

  1. Tạo một (vô hình, không liên quan) hộp thoại tiến trình sử dụng new ProgressDialog()

  2. Tạo khác tiến thoại với nội dung mong muốn sử dụng pd.Show(), mà không cần lưu trữ một tham chiếu đến nó.

  3. Loại bỏ hộp thoại đầu tiên. Hộp thoại từ (2) vẫn còn.

Nếu bạn thay thế mã của bạn với:

//pd = new ProgressDialog(this); 
pd = ProgressDialog.show(this, "Waiting...", "Please wait five seconds..."); 

nó nên chạy tốt.

+0

Nó ĐÃ LÀM VIỆC! Bạn đã đúng về Cảnh báo và tôi đã không nhận thấy nó. Nhưng tôi không thể hiểu tại sao IDE cho tôi biết rằng phương thức .show() không trả về bất kỳ thứ gì (void) và sau khi nó trả về một cá thể của một ProgressDialog? – Davidoff

+0

Có, tính năng này hoạt động. show() trả về một cá thể của ProgressDialog nhưng sử dụng từ khóa mới, chúng ta cũng có cùng một cá thể, tôi hy vọng. Bằng cách sử dụng ở trên, mã bỏ qua hoạt động, mặt khác, bằng cách sử dụng từ khóa mới, mã không hoạt động. – Khushboo

+0

Cảm ơn bạn đã giải thích tuyệt vời. – suku