본문 바로가기
IT 개발

[Android 개발 팁] Thread와 Handler를 이용해 ProgressDialog띄우기

by 로보찌빠냥 2011. 2. 9.
[Android 개발 팁] Thread와 Handler를 이용해 ProgressDialog띄우기


안드로이드 개발중 ListView에 웹에서 가저오는 데이터 띄워주는 동안 동글뱅이 돌아가면서 '잠시만 기다려주세요'라는 메시지를 보여주려다 수십차례 삽질을 했습니다..

webview에서 로딩할 때는 간단하게 되는데 ListView에서 ProgressDialog를 사용하려니까 잘 안되더라구요.
뭐 삽질은 했지만 다른 분들에게 많은 도움을 받았기에 나와 같은 고민을 하고 있는 분이 혹시라도 있으면 조금이나마 도움이 되고자 포스트 합니다.

아래 WatingDialog 클래스로 만들어 봤습니다. 사용법은

WatingDialog waitingDialog = new WatingDialog(context);
waitingDialog.startWaitingDialog("대기 중 보여줄 메시지");

이렇게 WatingDialog 객체를 new해서 startWaitingDialog를 하면 다이얼로그가 보여집니다.
그리고 끝나는 시점에서 waitingDialog.dismissWaitingDialog();를 호출해주면 다이얼로그를 Dismiss할 수 있습니다.
ListView 같은 경우에는 Adapter 에서 getView메소드 마지막 view객체를 return하기 전에 불러주면 다이얼로그가 닫아집니다.

이렇게 만들려면 waitingDialog 객체를 클래스객체로 선언해야 하는데 더 좋은 방법이 있는지는 잘 모르겠습니다.
혹시 더 좋은 방법이나 잘못된 부분을 지적해 주시면 많은 도움이 되겠습니다~ 그럼^^;



public class WatingDialog{
 
 private Context mContext;
 private Handler prgressHandler = new Handler() {
  public void handleMessage(Message msg) {
   //특별히 msg에 대한 처리는 하지 않음.
   watingDialog.dismiss();
  }
 };
 ProgressDialog watingDialog;
 
 public WatingDialog(Context context)
 {
  mContext = context;
 }
 
 /**
  * < WaitingDialog 를 멈추기 위한 메서드. >
  *
  * @author [찌빠]
  */
 public void dismissWaitingDialog(){
  Message msg = prgressHandler.obtainMessage();
  prgressHandler.sendMessage(msg);
 }
 
 /**
  * < WaitingDialog에 Massege를 설정하고 다이어로그를 보여주는 메서드. >
  *
  * @param [msg] [Dialog 에 보여지는 내용]
  * @author [찌빠]
  */
 public void startWaitingDialog(final String msg){
  new Thread(){
      public void run(){
   Looper.prepare();
   watingDialog = (ProgressDialog) onCreateDialog(msg);
   watingDialog.setOnCancelListener(new android.content.DialogInterface.OnCancelListener() {
    @Override
    public void onCancel(DialogInterface dialog) {
     // 로딩 중에 뒤로가기 버튼이 눌렸을 때 현재 Activity를 finish 해준다.

     ((Activity) mContext).finish();
    }
   });

   watingDialog.show();
       Looper.loop();
      }
     }.start();
 }
 
 /**
  * < startWaitingDialog()시 Dialog를 생성하는 메서드 >
  *
  * @param [msg] [Dialog 에 보여지는 내용]
  * @return [Dialog를 반환함.]
  * @author [찌빠]
  */
 protected Dialog onCreateDialog(String msg) {

  ProgressDialog progressDialog = new ProgressDialog(mContext);
  progressDialog.setMessage(msg);
  progressDialog.setCancelable(true);
  
  return progressDialog;
 }
}

반응형

댓글