2012-02-25 13 views
7

Lütfen aşağıdaki örnek kodu kontrol edin. Tost mesajları gösterilir, ancak progressdialog asla gizlenmez. Niye ya?ProgressDialog.dismiss() çalışmıyor

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); 
    } 


} 

beş saniye "TAMAM" mesajı gösterilir ama progressdialog görevden ve sağ thr pd.show() Ben progressdialog görevden alışkanlık aşağıda pd.dismiss() koymak bile ya ben don değil sonra Bunun neden olduğunu bilmiyorum ve beni delirtiyor!

cevap

23

İlerleme iletişim kutusunu doğru kullanmıyorsunuz. IDE'nin pd.show(...) hattınızın yanında düzgün bir küçük uyarı işareti olduğunu fark edeceksiniz.

Ne yapıyorsun bir depolama olmadan

  1. new ProgressDialog()

  2. pd.Show() kullanılarak istenen metin ile iletişim başka ilerleme oluşturma kullanarak (görünmez, alakasız) ilerleme iletişim yarat referans. İlk iletişim kutusunu reddetme. (2) 'den gelen diyalog kalır.

Eğer kodunuzu değiştirin

:

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

gayet çalışmalıdır.

+0

ÇALIŞIYOR! Uyarı konusunda haklıydın ve farketmedim. Fakat IDE'nin neden .show() yönteminin bir şey (void) döndürmediğini ve her şeyden sonra bir ProgressDialog örneğini döndürdüğünü neden anlayamıyorum? – Davidoff

+0

Evet, bu işe yarıyor. show() ProgressDialog örneğini döndürür, ancak yeni anahtar kelimeyi kullanarak da aynı örneği alırız, umarım. Yukarıdaki şekilde, işten çıkarma kodu çalıştı, diğer yandan, yeni anahtar kelimeyi kullanarak kod çalışmadı. – Khushboo

+0

Harika bir açıklama için teşekkür ederiz. – suku