2012-10-19 61 views
0

我有這樣的自定義對話框:自動駁回/關閉自定義對話框

public class MyProgressDialog extends Dialog { 

    public MyProgressDialog(Context context) { 
     super(context); 
    } 

    public static MyProgressDialog show(Context context) { 
     MyProgressDialog dialog = new MyProgressDialog(context); 

     dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
     dialog.setContentView(R.layout.progress); 
     dialog.getWindow().setBackgroundDrawableResource(
       android.R.color.transparent); 
     dialog.show(); 
     return dialog; 
    } 

    public static void dismiss(Context context) { 
     MyProgressDialog dialog = new MyProgressDialog(context); 
     dialog.dismiss(); 
    } 

} 

它會顯示

protected void onPreExecute() { 
     MyProgressDialog.show(ItemsActivity.this); 
     } 

但不會解僱:

MyProgressDialog.dismiss(ItemsActivity.this); 

沒有人知道爲什麼嗎?

回答

2

您正在創建一個新的對話框並將其解除,而不是您在show()中創建的對話框。您可以保留對最新創建的對話框的引用,並根據需要將其忽略。例如:

public static MyProgressDialog show(Context context) { 
    MyProgressDialog dialog = new MyProgressDialog(context); 

    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    dialog.setContentView(R.layout.progress); 
    dialog.getWindow().setBackgroundDrawableResource(
      android.R.color.transparent); 
    dialog.show(); 
    staticVariable = dialog; 
    return staticVariable; 
} 

public static void dismiss(Context context) { 
    staticVariable.dismiss(); 
} 

但是,這看起來並不是一個理想的設計。

+0

靜態不做會更好嗎? – KickingLettuce

+0

是的,更好的想法是將對話框引用保留在需要的位置。然後不用靜態的'dismiss()'方法,你可以得到你創建的一個,並在你不再需要時將其解除。 – dmon

+1

靜態引用的問題是它不夠聰明,如果你顯示兩個,那麼你將永遠無法隱藏第一個。你可以讓它變得更聰明,但是你應該保留一個引用。 – dmon