꿈꾸는 시스템 디자이너

ProgressDialog와 AlertDialog 사용법 본문

Development/Android

ProgressDialog와 AlertDialog 사용법

독행소년 2013. 7. 15. 14:33

어플리케이션이 동작하는 도중에 긴 시간의 I/O 작업이라던지 사용자로부터 확인 명령을 받아야 할때와 같은 경우 현재 엑티비티 상에 새로운 다이얼로그를 표시할 필요가 있다.


ProgressDialog는 I/O 작업과 같이 잠시 엑티비이의 상태를 동결시킬 때 사용되고, AlertDialog는 사용자로부터 확인 명령을 받을 때 사용된다.


public class MainActivity extends Activity {

	ProgressDialog progressDialog; // ProgressDialog
	AlertDialog.Builder alertDialog; // AlertDialog
	Button btShowDialog;
	Button btAlert;

	public static int TIME_OUT = 1001;

	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		btShowDialog = (Button) findViewById(R.id.btShowDialog);
		btAlert = (Button) findViewById(R.id.btShowAlert);
		alertDialog = new AlertDialog.Builder(this);
	}

	public void onClick(View v) {

		/**
		 * ShowDialog 버튼일 클릭될 때 호출
		 */
		if (v.getId() == btShowDialog.getId()) {

			// ProgressDialog 생성
			progressDialog = ProgressDialog.show(this, "Title", "Message");

			// 정해진 시간 후에는 타임아웃 발생을 위해 핸들러로 메시지 전달
			mHandler.sendEmptyMessageDelayed(TIME_OUT, 2000);

		}
		/**
		 * ShowAlert 버튼일 클릭될 때 호출
		 */
		else if (v.getId() == btAlert.getId()) {

			alertDialog.setPositiveButton(R.string.ok,
					new DialogInterface.OnClickListener() {

						public void onClick(DialogInterface dialog, int which) {
							Toast.makeText(getApplicationContext(),
									"Ok Button is Clicked", 0).show();
						}
					});
			alertDialog.setNegativeButton("Cancel",
					new DialogInterface.OnClickListener() {

						public void onClick(DialogInterface dialog, int which) {
							Toast.makeText(getApplicationContext(),
									"Cancel Button is Clicked", 0).show();
						}
					});
			alertDialog.setTitle("Title");
			alertDialog.setMessage("Message.....");
			alertDialog.show();
		}
	}

	Handler mHandler = new Handler() {

		public void handleMessage(Message msg) {
			if (msg.what == TIME_OUT) { // 타임아웃이 발생하면
				progressDialog.dismiss(); // ProgressDialog를 종료
			}
		}
	};
}

ProgressDialog 사용법

ProgressDialog의 생성 및 표시는 은 라인 27번과 같이 처리한다. 또한 표시된 ProgressDialog가 사라질 수 있도록 핸들러로 지연된 메시지를 던진다(라인 30).

핸들러는 지연된 메시지를 받아서 라인 63,64처럼 팝업되어 있는 ProgressDialog를 삭제한다.




AlertDialog 사용법

라인 16처럼 생성을 하고, 화면에 표시할 버튼들을 추가한다(라인 38,39, 라인 46,47). 또한 타이틀과 메시지를 설정한후 show() 호출을 통해 화면에 표시한다.




Comments