BLOG main image
분류 전체보기 (14)
Layout (1)
Network (3)
Reference (0)
Fundamentals (4)
System Controll (1)
DataBase (0)
Error Handle (2)
Book Review (1)
Debug (1)
Project (1)
시스의 생각
oooooxo's me2DAY
rss
2010/08/22 12:16

입맛에 맞는 Custom Dialog를 만드는 예제입니다. Activity에서 Custom Dialog를 호출한 뒤 사용자 입력을 받아서 Dialog를 호출한 Activity에 리턴 받아오는 예제입니다.

해결책

android.app.Dialog를 확장한 CustomDialog 클래스를 만듭니다. onDismissListener 인터페이스를 통해서 Custom Dialog로 부터 사용자 입력 데이터 값을 받아옵니다.

토의

먼저 Custom Dialog 레이아웃을 설정합니다. 아래와 같이 사용자 입력을 받을 EditText와 확인용 Button 으로 간단하게 구성하였습니다.

Custom Dialog를 호출할 Activity 역시 레이아웃을 설정하여 줍니다. 다이얼로그를 호출하는 이벤트를 발생시킬 버튼과 다이얼로그로 부터 받아온 사용자 입력값을 보여줄 TextView로 간단하게 구성합니다.

다음은 Custom Dialog의 구현부를 보도록 하겠습니다.

package kr.co.androidnote.diallogexample.diallog;

import kr.co.androidnote.diallogexample.R;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public final class CustomDialLog extends Dialog {
	
	private EditText _nameField ;
	private OnDismissListener _listener ;
	public CustomDialLog(Context context) {
		super(context);
		// TODO Auto-generated constructor stub
	}
	
	@Override
	public void onCreate( Bundle $savedInstanceState ) {
		super.onCreate( $savedInstanceState ) ;
		setContentView( R.layout.custom_dial_log ) ;
		setTitle( "Enter Your Name" ) ;
		
		_nameField = (EditText) findViewById( R.id.logTxt ) ;
		Button btn = (Button) findViewById( R.id.dismissBtn ) ;
		
		btn.setOnClickListener( new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				if( _listener == null ) {} else {
					_listener.onDismiss( CustomDialLog.this ) ;
				}
				dismiss() ;
			}
		}) ;
	}
	
	public void setOnDismissListener( OnDismissListener $listener ) {
		_listener = $listener ;
	}
	
	public String getName() {
		return _nameField.getText().toString() ;
	}
}

Dialog가 생성될때 호출되는 onCreate 메서드를 오버라이드 하였습니다. 이 메서드 안에서는 setContentView 메서드로 레이아웃을 설정하여 주고, setTitle 메서드로 다이얼로그의 타이틀을 설정하여 주었습니다. 레이아웃에서 구성한 버튼에 OnClickListener를 익명 내부 클래스 형태로 구현하였습니다. 버튼이 클릭되면 setOnDismissListener 메서드를 통해 설정된 OnDismissListener의 onDismiss 메서드를 Custom Dialog를 인자와 함께 호출하고 disMiss() 메서드를 실행합니다.

setOnDismissListener 메서드를 통해서 다이얼로그가 dismiss 될때에 호출될 리스너를 설정해 주도록 하였습니다.

getName 메서드를 통해서 Custom Dialog를 호출한 Activity에서 onDismiss 이벤트가 발생했을때 인자로 넘어오는 dialog를 통해 사용자 입력값에 접근할수 있습니다.

다음은 Custom Dialog를 호출하는 메인 Activity 구현부를 보도록 하겠습니다.

package kr.co.androidnote.diallogexample;

import kr.co.androidnote.diallogexample.diallog.CustomDialLog;
import android.app.Activity;
import android.content.DialogInterface;
import android.content.DialogInterface.OnDismissListener;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class DialLogMain extends Activity implements OnDismissListener, OnClickListener {
	
	private TextView _nameField ;
	
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        _nameField = (TextView) findViewById( R.id.nameField ) ;
        Button btn = (Button) findViewById(R.id.showDialogBtn) ;
        btn.setOnClickListener( this ) ;
    }

	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		CustomDialLog dialog = new CustomDialLog( this ) ;
        dialog.setOnDismissListener( this ) ;
        dialog.show() ;
	}

	@Override
	public void onDismiss(DialogInterface $dialog) {
		// TODO Auto-generated method stub
		CustomDialLog dialog = (CustomDialLog) $dialog ;
		String name = dialog.getName() ;
		_nameField.setText( name ) ;
	}

}

Activity에서는 Custom Dialog의 인스턴스를 만든다음에 show() 메서드를 통해 다이얼로그를 호출한뒤, 해당 다이얼로그가 dismiss될때의 이벤트를 onDismiss 메서드에서 처리하고 있습니다.

결과

안드로이드 다이얼로그 예제

안드로이드 다이얼로그 예제 - 다이얼로그 실행

안드로이드 다이얼로그 예제 - 사용자 데이터 입력

안드로이드 다이얼로그 예제 - activity에서 사용자 입력값 받아오기

 

크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback Address :: http://androidnote.tistory.com/trackback/2 관련글 쓰기
다이얼맨 | 2010/10/13 21:31 | PERMALINK | EDIT/DEL | REPLY
안녕하세요 원하는예제가 있어서 수월하게 해결했습니다.
다이얼로그창 띄울때 메인 Text에 있는 글씨를 EditText로 가져오는
방법도 있는지 궁금하네요
BlogIcon AndroidNote | 2010/10/15 22:10 | PERMALINK | EDIT/DEL
custom dialog에 외부 인터페이스를 만들고 메인에서 그 인터페이스를 호출하는 방식으로 가능할것 같습니다.

dialog.setText( "hello" ) ;
이런식으로 말이죠.

그럼 CustomDialLog 클래스 내에서는

public void setText( String $name ) {
nameField = (EditText) findViewById( R.id.logTxt ) ;
nameField.setTest( $name ) ;

이런식이 될것 같은데, 설계 방법에 따라 다양한 방법이 존재할 수 있을것 같습니다.
}
감사합니다 | 2011/02/18 18:16 | PERMALINK | EDIT/DEL | REPLY
한참을 이리저리 돌아다녔는데 제게 딱 맞는 포스팅을 써주셨네요
감사합니다^^
Name
Password
Homepage
Secret

티스토리 툴바