2010.10.20 11:27

어제 다이얼로그 때문에 삽질을 좀 많이 한것 같다. 다시 똑같은 실수를 범하지 않으려 한번 써본다.
다이얼로그를 만들시에, showDialog 메소드를 쓰는 경우도 있고, 아니면 다음과 같이 바로 생성 하기도 한다. 

다이얼로그 생성 1 )
...

AlertDialog.Builder dialog=new AlertDialog.Builder(this);
        dialog.setTitle(getText(R.string.alter_title))
     .setMessage(getText(R.string.alter_message))
             .setPositiveButton(getText(R.string.ok), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
 //onClick-Task
}
});
        dialog.show();

...

showDialog 메소드를 이용시, onCreateDialog 메소드를 Override 한 후에, showDialog 메소드를 통해서 불러온다.
 ( 여러개의 다이얼로그가 필요할 시에 유용한듯 - switch문을 만들어 활용 가능)
하지만, 여기서 주의 할 점이 생긴다. showDialog 메소드를 이용하여 생성된 다이얼로그는, 이후에 다시 showDialog 메소드를 이용하면, onCreateDialog 메소드를 타지 않는다. Activity 생성 후, showDialog 메소드 호출시, 단 한번만 onCreateDialog 메소드를 탄다는 것이다. 

그렇다면 지속적으로 onCreateDialog를 타게 하고 싶다면 어떻게 해야 할까? 
removeDialog 메소드를 이용하면 된다. 
만들어 졌던 Dialog를 removeDialog 메소드를 이용해서 지우고 나면, 이후에 다시 onCreateDialog를 타게 된다. 


다이얼로그 생성 2 )
...

@Override
protected Dialog onCreateDialog(int id) {
return new AlertDialog.Builder(Instu_testActivity.this)
.setTitle(getText(R.string.alter_title))
.setMessage(getText(R.string.alter_message))
.setPositiveButton(getText(R.string.ok), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//onClick-Task
}
}).create();
}

...

@Override
public void onClick(View view)
{
showDialog(0);   < - 단 한번만, onCreateDialog를 호출 하고 그 뒤로는 호출 하지 않는다.  즉, 계속해서 버튼을 호출 해도 
  한번 생성된 다이얼로그는 다시 생성되지 않는다. removeDialog를 호출해야 한다.
}

....


신고
Posted by 구름같은사나이

티스토리 툴바