Please Enable JavaScript!
Gon[ Enable JavaScript ]

반응형

앱에서 시간이 걸리는 작업을 수행할 때 ProgressDialog 클래스를 이용하면 사용자에게 실시간 진행 상태를 알릴 수 있습니다. 그리고 진행이 다 끝나면 팝업창은 사라지게 됩니다. 이런 ProgressDialog 에는 두 가지 종류가 있습니다. "스핀" 과 진행정도를 나타내는 "바" 형태의 다이얼로그입니다. 

 

 

▼ 먼저 스핀 ProgressDialog 다이얼로그를 살펴 보겠습니다. 스핀은 진행과정을 표시하지는 않고 계속해서 돌아가는 그림만 보여주죠. ProgressDialog setProgressStyle() 함수에 ProgressDialog.STYLE_SPINNER 옵션을 넘기시고 setMessage() 에 표현하고 싶은 메시지를 입력합니다. 마지막으로 다이얼로그를 띄우기 위해 show() 함수를 호출합니다.

 

ProgressDialog asyncDialog = new ProgressDialog(
		ProgressDialogActivity.this);
 
@Override
protected void onPreExecute() {
	asyncDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
	asyncDialog.setMessage("로딩중입니다..");
	
	// show dialog
	asyncDialog.show();
	super.onPreExecute();
}

 

 

▼ 진행 다이얼로그(ProgressDialog) 를 독립적으로 사용되면 의미가 없죠. 시간이 걸리는 작업을 하기 때문에 Thread AsyncTask 클래스에 포함되어서 사용됩니다. AsyncTask Thread 를 사용할 일이 있을 때 좀더 편리하게 이용할수 있도록 안드로이드에서 지원하고 있는 클래스 입니다. AsyncTask 를 상속받아 만든 클래스는 3가지 함수를 구현해야 합니다. 3가지 함수들에 ProgressDialog 기능을 구현하시면 됩니다.

 

onPreExecute() : 작업시작, ProgressDialog 객체를 생성하고 시작합니다.

doInBackground() : 진행중, ProgressDialog 의 진행 정도를 표현해 줍니다.

doPostExecute() : 종료, ProgressDialog 종료 기능을 구현합니다.

 

import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
 
public class ProgressDialogActivity extends Activity {
 
	@Override
	protected void onCreate(Bundle savedInstanceState) {
 
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_progress_dialog);
 
		CheckTypesTask task = new CheckTypesTask();
		task.execute();
	}
 
	private class CheckTypesTask extends AsyncTask<Void, Void, Void> {
		
		ProgressDialog asyncDialog = new ProgressDialog(
				ProgressDialogActivity.this);
 
		@Override
		protected void onPreExecute() {
			asyncDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
			asyncDialog.setMessage("로딩중입니다..");
			
			// show dialog
			asyncDialog.show();
			super.onPreExecute();
		}
 
		@Override
		protected Void doInBackground(Void... arg0) {
			try {
				for (int i = 0; i < 5; i++) {
					//asyncDialog.setProgress(i * 30);
					Thread.sleep(500);
				}
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			return null;
		}
 
		@Override
		protected void onPostExecute(Void result) {
			asyncDialog.dismiss();
			super.onPostExecute(result);
		}
	}
}

 

 

※ 아래는 참고하면 좋을 만한 글들의 링크를 모아둔 것입니다.
안드로이드(Android) 다이얼로그 Dialog 텍스트 링크 거는 방법
안드로이드(Android) 기본 알림창 AlertDialog 선택 목록창
안드로이드(Android) 다이얼로그(Dialog) Animation 효과
안드로이드(Android) 기본 알림창 AlertDialog 띄우는 방법
드로이드(Android) 기본 알림창인 AlertDialog

 

 

 

▼ 두번째 ProgressDlg 의 형태인 진행바 입니다. ProgressDialog.STYLE_SPINNER 대신ProgressDialog.STYLE_HORIZONTAL 입력하시면 됩니다. 그리고 나머지 셋팅은 동일하죠.

ProgressDialog asyncDialog = new ProgressDialog(
		ProgressDialogActivity.this);
 
@Override
protected void onPreExecute() {
	asyncDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
	asyncDialog.setMessage("로딩중입니다..");
	
	// show dialog
	asyncDialog.show();
	super.onPreExecute();
}

 

ProgressDlg 의 진행바 형태이기 때문에 진행정도를 나타낼수 있도록 셋팅을 해주어야 합니다. AsyncTask 에서 doInBackground() 함수가 작업 진행을 알리는 CALLBACK 함수이죠. 이곳에 ProgressDlg setProgress() 함수를 셋팅해 주시면 됩니다.

import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
 
public class ProgressDialogActivity extends Activity {
 
	@Override
	protected void onCreate(Bundle savedInstanceState) {
 
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_progress_dialog);
 
		CheckTypesTask task = new CheckTypesTask();
		task.execute();
	}
 
	private class CheckTypesTask extends AsyncTask<Void, Void, Void> {
		
		ProgressDialog asyncDialog = new ProgressDialog(
				ProgressDialogActivity.this);
 
		@Override
		protected void onPreExecute() {
			asyncDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
			asyncDialog.setMessage("로딩중입니다..");
			
			// show dialog
			asyncDialog.show();
			super.onPreExecute();
		}
 
		@Override
		protected Void doInBackground(Void... arg0) {
			try {
				for (int i = 0; i < 5; i++) {
					asyncDialog.setProgress(i * 30);
					Thread.sleep(500);
				}
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			return null;
		}
 
		@Override
		protected void onPostExecute(Void result) {
			asyncDialog.dismiss();
			super.onPostExecute(result);
		}
	}
}

 

▼ 아래 그림처럼 doInBackground() setProgress() 값을 셋팅해주시면 작업이 종료 될 때까지 바 그래프와 숫자값이 바뀌겠죠. 이상으로 ProgressDlg 의 두가지 형태를 AsyncTask 와 함께 어떤식으로 사용하는지 알아 보았습니다.

※ 아래는 참고하면 좋을 만한 글들의 링크를 모아둔 것입니다.
안드로이드(Android) 다이얼로그 Dialog 텍스트 링크 거는 방법
안드로이드(Android) 기본 알림창 AlertDialog 선택 목록창
안드로이드(Android) 다이얼로그(Dialog) Animation 효과
안드로이드(Android) 기본 알림창 AlertDialog 띄우는 방법
드로이드(Android) 기본 알림창인 AlertDialog
반응형
Posted by 녹두장군1
,