마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

왜 다이얼로그를 두번 show하면 죽는건가요?

0 추천

 

질문에 대한 현상을 보이는 코드는 아래와 같습니다.
버튼을 눌렀을때 다이얼로그를 show 하고.
뒤로가기를 눌러서 띄워진 다이얼로그를 닫고
다시 show를 하기 위해서 버튼을 누르면 죽어버립니다.
이유를 모르겠네요;;
조언 부탁드립니다.
 
package com.example.dialogtest;
 
import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.Toast;
 
public class MainActivity extends Activity {
LinearLayout linear;
Builder alertDialog;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        Button btn = (Button)findViewById(R.id.button1);
        linear = (LinearLayout)View.inflate(this, R.layout.mainsection_setting_menu, null);
alertDialog =  new AlertDialog.Builder(MainActivity.this)
       .setView(linear);
       
        btn.setOnClickListener(customDialogOnClickListener);
        linear.findViewById(R.id.imageView1).setOnClickListener(customDialogOnClickListener);
    }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
    
    View.OnClickListener customDialogOnClickListener = new View.OnClickListener() {
 
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch(v.getId()) {
 
case R.id.button1 :
alertDialog.show();
break;
 
case R.id.imageView1 :
 
break;
 
 
}
}
};
}
 
갸아악 (21,260 포인트) 님이 2013년 3월 22일 질문

2개의 답변

+1 추천
다이얼로그가 떠 있는데 또 show를 하면

IlleagalStateException이 발생합니다.

닫혀 있는데 dismiss를 해도 마찬가지구요.

숨기고 보이고 하는데 내부 상태 이런건 객체가 사라지기 전에는 안 바뀌구요.

닫혀 있을때만 열리고, 열려 있을때만 닫히도록 로직을 확실하게 수정하시고

show앞에 if(!dialog.isShowing()) 정도는 추가해 주시는게 좋습니다.
퐁풍 (8,740 포인트) 님이 2013년 3월 24일 답변
짱... 12글자      . ,
0 추천
case R.id.button1 :
// 이곳에 new dialog 하세요
break;
aucd29 (218,390 포인트) 님이 2013년 3월 22일 답변
...