안드로이드 개발 질문/답변
(글 수 45,052)
질문은 제목 그대로입니다만...
Popup Window 대신으로 AlertDialog 를 이용하려 합니다.
Develope.android.com 에서 참조해서 코드를 만들었는데, 객체 생성 조건에 대해 이해가 안 되는 부분이 있어 질문 올립니다.
설명을 쉽게 하기 위해 예제 코드를 작성했습니다.
---------------------------------------------------
public class list1 extends ListActivity {
...
AlertDialog.Builder msgPopup = null; // 전역( ? ) 객체 선언
AlertDialog msgPopupAlert = null; // Alert 객체 선언?
...
@Override
public void onCreate( Bundle savedInstanceState ) {
super.onCreate(savedInstanceState);
setContentView( ... );
...
onClick() {
foo( "msg1" );
}
...
}
protected void foo( String msg )
{
if ( null == msgPopup ) {
msgPopup = new AlertDialog.Builder( this );
msgPopup.setPositiveButton(
"Close", new DialogInterface.OnClickListener() {
public void onClick( DialogInterface dialog, int id ) { dialog.dismiss(); };
}
);
}
msgPopup.setMessage( msg );
if ( null == msgPopupAlert ) {
AlertDialog msgPopupAlert = msgPopup.create();
}
}
}
위와 같이, 예를들어 조건에 따라 여러번 popup 이 생긴다고 할 때 ( foo() 함수 ),
popup이 보일때 이게 여러번 create되지 않고,
Activity의 전역(?)에 객체를 선언해서
만약 객체가 미리 선언되었다면 다시 Create하고 싶지 않았습니다.
그런데,
예문을 보니 AlertDialog는
new AlertDialog.Builder( this );
AlertDialog msgPopupAlert = msgEnlargePopup.create();
이렇게 Builder 와 Creater 의 두개(?) 가 있더라구요?
그럼, 위와 같이 사용하면 Popup Window가 항상 create 안 되게 할 수 있는건가요?
아니면 원래 Popup() 이란 게 dismiss() 되면 메모리에서 해제되기 때문에 반드시 매번 create() 해 줘야 되는 건가요?
해답을 아시는 분들깨서는 답변주시면 대단히 감사하겠습니다.
그럼, 좋은 주말 되시기 바랍니다.
여름철 메뚜기가 마냥 부러운 1人
2010.03.27 19:55:11
위와 같이 사용하시게 되면 Popup Window 가 항상 생성될 듯 합니다. 코드상에 약간 문제가 있는거 같네요.
if ( null == msgPopupAlert ) {
AlertDialog msgPopupAlert = msgPopup.create();
}
이렇게 하시면 msgPopupAlert 가 해당 Scope 변수가 되기 때문에 클래스 변수로 선언하신 msgPopupAlert 에는 영원히 값이 할당되지 않을 듯 합니다. 따라서 매번 foo 가 호출될 때마다, AlertDialog 는 새롭게 만들지만 사용하지는 않겠네요.
제 개인적으로 효율적으로 Dialog 를 관리하시고자 한다면, onCreateDialog / onPrepareDialog / showDialog / dismissDialog API 를 사용하시는 걸 추천합니다.
http://developer.android.com/guide/topics/ui/dialogs.html