2013-05-07 48 views
7

我在活動中使用showDialogdismissDialog來顯示和銷燬我的對話框。是否還有一種方法可以在當前顯示的對話框上發出點擊命令,而不需要保留引用該對話框的變量?如何通過代碼點擊AlertDialog上的「確定」?

例如,我想通過代碼按下對話框中的「確定」/肯定按鈕。另外

AlertDialog dialog = ... 
dialog.getButton(DialogInterface.BUTTON_POSITIVE).performClick(); 

,如果你不希望保留到對話框的參考,但:

AlertDialog.Builder alBuilder = new AlertDialog.Builder(this); 
     alBuilder 
       .setMessage("Do you wamt to exit?") 
       .setPositiveButton("Yes", 
         new DialogInterface.OnClickListener() { 

          @Override 
          public void onClick(DialogInterface dialog, 
            int which) { 
           dialog.cancel(); 
           // Write your code here for Yes 
          } 
         }) 
       .setNegativeButton("No", 
         new DialogInterface.OnClickListener() { 

          @Override 
          public void onClick(DialogInterface dialog, 
            int which) { 
           dialog.cancel(); 
           // Write your code here for No 
          } 
         }); 
     alBuilder.setCancelable(false); 
     alBuilder.show(); 
+0

您是否使用生成器來設置對話框? – TronicZomB 2013-05-07 02:54:31

+0

@TronicZomB:是的,我正在使用'Builder',並且我正在重寫'Activity'中的'onCreateDialog'來設置我的對話框。 – Arci 2013-05-07 03:05:42

+1

好吧,bakriOnFire在我注意到他的答案之前就已經有了一個很好的例子,我正準備發佈。這幾乎是你想要的代碼模型。 – TronicZomB 2013-05-07 03:07:31

回答

25

我沒有測試代碼,但它應該工作 - :

+0

謝謝,但我使用的是Builder,它沒有'getButton'方法。有沒有辦法點擊'確定'按鈕,而沒有保持對實際對話框的參考? – Arci 2013-05-07 03:11:44

+2

如果您能夠保留對該對話框的引用,則AlertDialog實例由AlertDialog.Builder#show()返回。否則,是否可以將點擊式邏輯移至單獨的方法?您不必模擬點擊,而只需執行點擊代碼並關閉對話框。 – 2013-05-07 03:16:11

+0

是的,它返回一個'AlertDialog',但我不喜歡保留一個引用'AlertDialog'的變量。如果我有對話的ID,有沒有辦法使用'Activity'來訪問對話框? – Arci 2013-05-07 03:20:39

-1

試試這個在其設置的控制,你可以提取上單擊代碼到另一種方法:

AlertDialog.Builder builder = ... 
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int which) { 
    onPositiveButtonClicked(); 
    } 
}); 

和實施onPositiveButtonClicked()在您的活動。您可以撥打onPositiveButtonClicked()dismissDialog(id),而不是通過編程方式點擊確定按鈕。如果需要處理多個對話框,請使用onPositiveButtonClicked作爲id參數。

+0

謝謝!但我認爲你誤解了我的問題。 – Arci 2013-05-07 03:12:53

+0

可以發表你的代碼,以便我們可以理解你想要的。 – bakriOnFire 2013-05-07 05:00:24

+0

我在找'activity.getActiveDialog(DIALOG_ID).getButton(...)。performClick()'之類的東西。就像'activity.dismissDialog(DIALOG_ID)'一樣,只需使用DIALOG_ID即可解除對話框。 – Arci 2013-05-07 07:17:46

4

我想通過代碼

是按「確定」 /負對話框的按鈕,就可以通過獲取POSITIVE按鈕實例做出來,然後調用它performClick()。嘗試它:

Button okButton = alertDialog.getButton(DialogInterface.BUTTON_POSITIVE); 
okButton.performClick(); //<<< click Button using code 
+0

謝謝!但是如果我沒有引用「'變量?有沒有辦法只用'Activity'來訪問'POSITIVE'按鈕(類似於'dismissDialog')? – Arci 2013-05-07 03:09:29