2017-09-10 3 views
0

몇 가지 상황이 발생하면 다른 Android AlertDialog (dialog2)를 발생시키는 Android AlertDialog (대화 상자라고 함)를 만들었습니다.Android에서 한 번에 2 개의 AlertDialog를 닫을 수 없습니다.

나는 그 중 하나만 화면에 표시되면 아무 문제없이 해고된다는 것을 확인했습니다.

두 번째 대화 상자에서 [확인] 단추를 누르면 두 번째 대화 상자가 닫히고 첫 번째 대화 상자가 화면에 나타나기는하지만 문제가 발생합니다.

그 동작 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() 만 남겨두고; 무엇을 기각하면 두 번째 대화가 아닌 첫 번째, 안드로이드는 어떻게 든 다른 하나의 혼란과 같은, 그리고 나는 그들이 다음과 같이 별도로 만들어지기 때문에 그 일이해야한다고 생각하지 않습니다

dialog=[code to create that dialog] 
dialog2=[code to create that 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'라는 로컬 변수가 있기 때문입니다. 더 넓은 범위의 '대화 상자'변수보다 우선합니다.

셋째, 실제 질문에 답하기 위해 두 번째 질문을 표시하기 직전에 첫 번째 대화 상자를 닫을 수 있습니까? 나는 동시에 두 개의 대화 상자를 열어 볼 실제 이유가 없다.

관련 문제