어플리케이션이 동작하는 도중에 긴 시간의 I/O 작업이라던지 사용자로부터 확인 명령을 받아야 할때와 같은 경우
현재 엑티비티 상에 새로운 다이얼로그를 표시할 필요가 있다.
ProgressDialog는 I/O 작업과 같이 잠시 엑티비이의 상태를 동결시킬 때 사용되고, AlertDialog는 사용자로부터 확인 명령을 받을 때 사용된다.
public class MainActivity extends Activity {
ProgressDialog progressDialog; // ProgressDialog
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);
}
}
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를 삭제한다.