2017-09-10 43 views
0

我已經建立了一個機器人AlertDialog將觸發其他Android AlertDialog(名爲dialog2)如果某些條件發生(命名對話框)。不能立刻解僱2個AlertDialogs Android中

我檢查,如果只有其中一個屏幕上顯示它是什麼沒有任何問題駁回。

問題是當兩者都出現了,這種情況發生的時候我按OK按鈕第二個對話框,它只是關閉了第二個對話框,儘管第一個對話框甚至顯示在屏幕上。

這是爲了dialog2該操作相關的代碼:

dialog2.setOnShowListener(new DialogInterface.OnShowListener() 
{ 

    @Override 
    public void onShow(final DialogInterface dialog) 
    { 

     Button button = ((AlertDialog)    
     dialog).getButton(AlertDialog.BUTTON_POSITIVE); 

     button.setOnClickListener(new View.OnClickListener() 
     { 

      @Override 
      public void onClick(View view) 
      { 

       [some more operations] 
       dialog2.dismiss(); 
       dialog.dismiss(); 

      } 
     }); 
    } 

});

最奇怪的是,如果我剿線dialog2.dismiss();通過只留下dialog.dismiss();什麼被擱置是第二個對話框,不是第一個,看起來像Android這樣莫名其妙地混淆了一個與其他的,我不認爲應該發生,因爲他們都是這樣單獨創建:

dialog=[code to create that dialog] 
dialog2=[code to create that dialog] 

這樣做是當我被問到關閉對話框時,我看到那個應用程序關閉dialog2的唯一方法就是做dialog = dialog2,而我不是。我認爲它們應該是不同的對象,每個對象都有它們的特徵。

我看不出有任何理由爲什麼發生這種情況的,好像從我的角度來看一個無能的錯誤。希望你可以給出有關正在發生的事情的想法。

回答

1

幾件事情要注意這裏:

首先,這是沒有必要創建一個「onShowListener」,除非你確實需要執行任務時,所示的對話框,該代碼應該幫助你正確地創建一個AlertDialog:

new AlertDialog.Builder(getContext()) 
       .setTitle(R.id.dialog_title) 
       .setMessage(R.id.dialog_message) 
       .setPositiveButton(R.id.positive_text, new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialogInterface, int i) { 
        //do onClick stuff here 
        } 
       }) 
       .show(); 

此示例一次執行所有設置。如果您需要參考此對話框或不想立即顯示,只需使用AlertDialog.Builder dialog1 = new ...,然後使用dialog1.show()創建對話框。其次,當你抑制dialog2.dismiss()時,只有第二個對話框關閉的原因是因爲你的onShow()方法內部有一個名爲'dialog'的局部變量(查看方法參數),它是優先於更廣泛的範圍'對話'變量。

第三,要回答你的問題的實際,你可以辭退的第一個對話框告訴你第二個之前?我沒有看到有任何真正的理由同時打開2個對話框。