2011-04-14 69 views
16

我有我創建一個對話框如何檢查是否打開對話框?

public static void showDialog(Context context) { 
    AlertDialog.Builder builder = new AlertDialog.Builder(context); 
    builder.setTitle("Title"); 
    builder.setMessage("Message"); 
    builder.setPositiveButton("ok", new OnClickListener() { 
      public void onClick(DialogInterface dialog, int arg1) { 
       dialog.dismiss(); 
      }}); 
    builder.setCancelable(false); 
    builder.create().show(); 
} 

在我的應用程序有可能是一個方法的時候可以調用多次的情況靜態方法,但我不希望打開2間或更多的對話。如何檢查是否打開對話框?謝謝...

回答

32

您應該將此代碼放入您希望支持此功能的每項活動中。

public AlertDialog myAlertDialog; 

public void showDialog(Context context) { 
     if(myAlertDialog != null && myAlertDialog.isShowing()) return; 

     AlertDialog.Builder builder = new AlertDialog.Builder(context); 
     builder.setTitle("Title"); 
     builder.setMessage("Message"); 
     builder.setPositiveButton("ok", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int arg1) { 
        dialog.dismiss(); 
       }}); 
     builder.setCancelable(false); 
     myAlertDialog = builder.create(); 
     myAlertDialog.show(); 
} 
+0

這種方法將不會在不同的活動工作,如果你將通過'this'的意思'活動「作爲上下文。當第二個活動將調用此方法時,上下文將過期(第一個「活動」)。 – ernazm 2011-04-14 08:51:50

+1

@ user639183你說得對。最好把它放在活動類中,並使其不是靜態的。 – vendor 2011-04-14 08:54:28

+0

對我來說可以工作...在我的應用程序中,只有一個Activity可以調用此方法幾次。但我不喜歡與靜態成員一起工作......是否安全?我應該殺死這個成員嗎? – Jim 2011-04-14 09:11:08

1

重寫您的方法返回AlertDialog,將其分配給一個成員,並檢查之前調用此方法,如果它爲空或!isShowing()
您也可以使用onCreateDialog。在需要對話管理的活動的基類中實現此方法,然後在需要的地方撥打showDialog(int id)

+0

此方法不會運行相同的對話框幾次? – Jim 2011-04-14 08:30:03

+0

它會嘗試,如果你不會檢查'null'和'isShowing' – ernazm 2011-04-14 08:40:21

+0

謝謝...我應該試試.. – Jim 2011-04-14 08:46:56

0
​​
+0

你可以動態地傳遞title,msg從頂部的功能! – mkh 2012-12-28 22:35:42

+0

你應該提供答案...一塊代碼是不是一個答案 – 2012-12-28 22:57:48