Please Enable JavaScript!
Gon[ Enable JavaScript ]

반응형

안드로이드(Android) 기본 알림창인 AlertDialog ListView 표현하는 방법

 

환경 : Eclipse Mars, Android 4.2.2

 

기본 알림창인 AlertDialog 다이얼로그에 ArrayAdapter 객체를 넣어서 목록 팝업창을 만들어 보겠습니다. AlertDialog 에서는 목록형태를 구현할수 있도록 다양한 함수를 제공하고 있는데 그중 하나가 setAdapter() 입니다.

 

 

▼ 선택을 요구하는 옵션창을 구현하고 싶을 때 팝업창으로 목록을 띄우게 됩니다. AlertDialog 는 목록 선택창을 구현할수 있도록 되어 있습니다. setAdapter() 함수에 ArrayAdapter 객체를 생성해서 넘기면 됩니다. ArrayAdapter 객체생성시 입력된 select_dialog_singlechoice 는 목록에 옵션 컨트롤을 추가한 것입니다. 

 

// List Adapter 생성
final ArrayAdapter<String> adapter = new ArrayAdapter<String>(
		AlertDialogListAdapterActivity.this,
		android.R.layout.select_dialog_singlechoice);
adapter.add("사과");
adapter.add("딸기");
adapter.add("오렌지");
adapter.add("수박");
adapter.add("참외");

 

▼ 위에서 생성한 ArrayAdapter 객체를 Builder setAdapter() 함수의 인수로

넘겼습니다. 동영상에서도 보셨겠지만 목록창에서 값을 선택하게 되면 한번더

팝업창이 뜨게 됩니다. 팝업창에는 선택한 값을 보여주게 되죠. 그것은 setAdapter()

의 인수로 넘긴 DialogInterface.OnClickListener 객체 onClick() 함수에 구현되어

있습니다. Builder 내부에 AlertDialog Builder 가 하나 더 있는 것이죠.

목록에서 선택한 값을 알아내는 방법은 onClick() 이벤트 발생시 넘어온 id 값으로

ArrayAdapter 객체의 값을 찾아 오는 것입니다. 찾아온 목록선택값을 내부 Builder

생성시 값으로 셋팅합니다.

 

// Adapter 셋팅
alertBuilder.setAdapter(adapter,
		new DialogInterface.OnClickListener() {
			public void onClick(DialogInterface dialog,
					int id) {
				
				// AlertDialog 안에 있는 AlertDialog
				String strName = adapter.getItem(id);
				AlertDialog.Builder innBuilder = new AlertDialog.Builder(
						AlertDialogListAdapterActivity.this);
				innBuilder.setMessage(strName);
				innBuilder.setTitle("당신이 선택한 것은 ");
				innBuilder
						.setPositiveButton(
								"확인",
								new DialogInterface.OnClickListener() {
									public void onClick(
											DialogInterface dialog,
											int which) {
										dialog.dismiss();
									}
								});
				innBuilder.show();
			}
		});
alertBuilder.show();

 

▼ 기본 AlertDialog 를 생성하기 위해서는 팝업창에 보이는 제목과 내용, 제목에서 보여줄 아이콘등을 셋팅할수 있습니다. 이번 예제는 제목과 setIcon() 함수로 제목옆에 표현할 아이콘을 추가했습니다. 그리고 버튼은 setNegativeButton() 함수로 취소 버튼만 추가했으며 클릭시 팝업창이 사라지도록 dismiss() 호출했습니다.

 

AlertDialog.Builder alertBuilder = new AlertDialog.Builder(
		AlertDialogListAdapterActivity.this);
alertBuilder.setIcon(R.drawable.ic_launcher);
alertBuilder.setTitle("항목중에 하나를 선택하세요.");

// 버튼 생성
alertBuilder.setNegativeButton("취소",
		new DialogInterface.OnClickListener() {
			public void onClick(DialogInterface dialog,
					int which) {
				dialog.dismiss();
			}
		});

 

▼ 아래 소스는 위에서 설명한 내용이 전부 들어가 있는 전체 메인 activity 소스 입니다. 버튼 하나만 들어가 간단한 구조라서 화면 레이아웃 XML 파일은 추가하지 않았습니다.

 

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;

public class AlertDialogListAdapterActivity extends Activity
		implements OnClickListener {

	final Context context = this;
	private Button btnAlert;

	public void onCreate(Bundle savedInstanceState) {

		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_alert_dialog_list_adapter);

		btnAlert = (Button) findViewById(R.id.btn_alert);

		// 클릭 이벤트
		btnAlert.setOnClickListener(this);
	}

	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.btn_alert:

			AlertDialog.Builder alertBuilder = new AlertDialog.Builder(
					AlertDialogListAdapterActivity.this);
			alertBuilder.setIcon(R.drawable.ic_launcher);
			alertBuilder.setTitle("항목중에 하나를 선택하세요.");

			// List Adapter 생성
			final ArrayAdapter<String> adapter = new ArrayAdapter<String>(
					AlertDialogListAdapterActivity.this,
					android.R.layout.select_dialog_singlechoice);
			adapter.add("사과");
			adapter.add("딸기");
			adapter.add("오렌지");
			adapter.add("수박");
			adapter.add("참외");

			// 버튼 생성
			alertBuilder.setNegativeButton("취소",
					new DialogInterface.OnClickListener() {
						public void onClick(DialogInterface dialog,
								int which) {
							dialog.dismiss();
						}
					});

			// Adapter 셋팅
			alertBuilder.setAdapter(adapter,
					new DialogInterface.OnClickListener() {
						public void onClick(DialogInterface dialog,
								int id) {
							
							// AlertDialog 안에 있는 AlertDialog
							String strName = adapter.getItem(id);
							AlertDialog.Builder innBuilder = new AlertDialog.Builder(
									AlertDialogListAdapterActivity.this);
							innBuilder.setMessage(strName);
							innBuilder.setTitle("당신이 선택한 것은 ");
							innBuilder
									.setPositiveButton(
											"확인",
											new DialogInterface.OnClickListener() {
												public void onClick(
														DialogInterface dialog,
														int which) {
													dialog.dismiss();
												}
											});
							innBuilder.show();
						}
					});
			alertBuilder.show();
			break;

		default:
			break;
		}
	}
}

 

 

반응형
Posted by 녹두장군1
,