[안드로이드] 다이얼로그 생성하기

반응형




읽기전에 손가락 한번 클릭~ >_<

고마워요 ~ Chu ~ ♥


안드로이드의 다이얼로그에 대한 내용입니다.


다이얼로그 생성하기

다이얼로그는 액티비티 위에 나타나는 작은 윈도우로서 , 다이얼로그 아래에 놓인 액티비티는 포커스를 잃게되고, 해당 다이얼로그가 사용자와의 상호작용을 처리하게 됩니다.

보통 노티피케이션이나 어플리케이션의 작업에 관련된 짧은 일을 처리하기 위해 사용되는데요,
다이얼로그의 기본 종류는 4가지가 있습니다.


다이얼로그의 종류

⊙ AlertDialog : 0~3개의 버튼 및 체크박스와 라디오버튼을 가지는 선택가능한 아이템들을 관리할 수 있는 다이얼로그입니다. 대부분의 UI를 만들 수 있으며 권장되는 다이얼로그 타입이네요.

⊙ ProgressDialog : 진행바퀴 또는 진행바를 보여주는 다이얼로그입니다. AlertDialog 의 하위클래스이기 대문에 버튼을 지원합니다.

⊙ DatePickerDialog : 날짜를 선택할 수 있는 다이얼로그 입니다.

⊙ TimePickerDialog : 시간을 선택할 수 있는 다이얼로그 입니다.

☞ 커스텀 다이얼로그를 만드려면 위 클래스를 상속한 뒤에 구현하면 됩니다.



다이얼로그 구현


우선, 다이얼로그는 항상 액티비티의 일부로써 생성되고 보여지는 종류입니다.
액티비티에서 onCreateDialog() 메소드로 다이얼로그를 생성합니다.



API 의 오른쪽에 보시면 아시겠지만 이 메소드는 API Level 8 - 즉, 안드로이드 2.2겠네요 - 에서 새로 만들어진 메소드네요.


안드로이드 초기에 있던 메소드는 현재 사용되지 않는군요.




어쨋거나 이 메소드를 사용하면 시스템이 자동으로 다이얼로그 상태를 관리하고 액티비티에 연결해 줍니다. 그런뒤 다이얼로그는 액티비티의 속성들을 상속합니다.
따라서,  만일 onCreateDialog() 메소드를 사용하지않고 다이얼로그를 생성하면 액티비티에 포함되지 않기 때문에 , 이럴 경우엔 setOwnerActivity(Activity) 메소드를 사용해야만 합니다.





다이얼로그를 생성 후 보여줄때엔 showDialog() 메소드를 사용합니다. 또한 다이얼로그 구분을 위하여 이 메소드에 다이얼로그의 고유한 정수값 ID 를 파라미터로 넘겨주어야 겠습니다.



다이얼로그가 최초로 요청되면 액티비티의 onCreateDialog() 를 호출하기 대문에, 이 메소드 안에서 다이얼로그를 인스턴스화 해야만 합니다.
인자로는 다이얼로그의 고유한 정수 ID를 받지요. ( 위의 API 그림을 참고 하세요 ^^ )

메소드의 마지막에선 생성된 다이얼로그 객체를 리턴해야 합니다.

다이얼로그가 보여지기 직전에 onPrepareDialog() 메소드가 호출되는데, 동적으로 어떤것들을 바꾸려면 이 메소드를 재정의 해야합니다.


이 메소드도 onCreateDialog() 와 마찬가지로, API 8 버전에 새롭게 정의되었고, 이전버전은 사용되지 않습니다.

어쨋든 onPrepareDialog() 메소드는 다이얼로그가 오픈될때 마다 호출됩니다.
결국 이 메소드를 재정의하지 않으면 동적으로 바뀌는것은 아무것도 없겠지요.

인자로는 생성된 Dialog 객체와 다이얼로그의 고유정수값 ID를 받습니다. 추가로 showDialog 에서 제공된 Bundle 객체까지 받습니다.

다이얼로그를 정의할 때엔 각 다이얼로그 별로 고유 정수 ID를 부여하고, switch-case 문에서 ID를 체크 한 뒤, 각각의 다이얼로그를 생성하면 되겠습니다.



이렇게 생성한 뒤, 다이얼로그를 보여줘야 할때엔 다이얼로그 ID를 이용하여 showDialog(int) 메소드를 호출합니다.
showDialog(DIALOG_ONE_ID);

 

다이얼로그 닫기

다이얼로그를 닫기 위해선 dismiss() 메소드를 호출합니다.
또한, 액티비티로 부터 dismissDialog() 메소드를 호출할 수 있고, 결국 이 메소드는 다이얼로그의 dismiss() 메소드를 호출하게 됩니다.



재밌는 점은 다이얼로그의 onCreateDialog() 로 생성되면, 다이얼로그 객체는 다이얼로그가 닫혀질 때마다 액티비티에 보관된다는 점입니다.

만일, 객체를 보관하지 않거나 객체를 제거하려면 removeDialog() 메소드를 호출합니다.


이 메소드는 다이얼로그 객체의 모든 참조를 제거하며, 다이얼로그가 표시되고 있다면 그것을 닫아버립니다.


다이얼로그 닫기 리스너

다이얼로그가 닫힐 때 어떤 작업을 처리하기 위해선 다이얼로그에 on-dismiss 리스너를 추가해야 합니다. 이것은 DialogInterface.OnDismissListener 인터페이스를 정의하는데 이 인터페이스는 한가지의 메소드 - 즉, onDismiss() 메소드만을 가지고 있습니다.




이 메소드가 다이얼로그가 닫힐 때 호출됩니다. 그런뒤 OnDismissListener 를
setOnDismissListener() 에 파라미터로 전달합니다.



다이얼로그는 '닫기' 외에 '취소' 가 될 수도 있습니다.  취소는 사용자가 다이얼로그를 닫기 위하여 "BACK" 버튼을 누르거나, 다이얼로그의 cancel() 메소드가 호출되는 것입니다.

onDismissListener 는 '취소' 또한 닫히는것의 일부이므로 리스닝(통보) 할 수 있지만, '닫힘'이 아닌 오로지 '취소' 의 행위에 의해서만 처리하려면 DialogInterface.OnCancelListenersetOnCancelListener() 메소드를 이용하여 등록해야 겠습니다.







다음 포스팅에선 AlertDialog 를 생성하여 직접 만들어 보는 과정을 할께요 ㅎ



관련글





반응형

댓글(2)

  • 현우
    2011.03.22 11:34

    잘보고갑니다.

  • dd
    2015.01.25 20:56

    와 .. 명확한 설명 감사합니다!!

Designed by JB FACTORY