[안드로이드] 커스텀 다이얼로그 [2] - ClickListener, Callback
[안드로이드] 커스텀 다이얼로그 [2] - ClickListener, Callback
지난 포스팅에선 커스텀 다이얼로그를 생성하고 보여주는 것을 해보았습니다.
이번엔 커스텀 다이얼로그 안에서의 클릭 이벤트 (ClickListener) 를 어떻게 다루는지에 대해 설명해드리도록 하겠습니다.
일단 쉽게 생각하면 다이얼로그도 View 에 속하는 컴포넌트로
다루는 방법이 크게 다르지 않다는 점입니다.
먼저 간단하게 CustomDialog 에서 ClickListener 를 등록해보도록 하겠습니다.
그 이후에 Activity -> Dialog -> Activity 로 파라미터를 넘기는 것을 구현하겠습니다.
먼저 결과입니다.
1. Result
2. Step by Step
2-1. ClickListener 등록
먼저 다이얼로그에 있는 컴포넌트들 (TextView) 에 Id 를 통해 TextView 객체를 가져왔었습니다. 그 객체에 setOnClickListener 를 설정하겠습니다.
cancelTv = (TextView) findViewById(R.id.findPwDialogCancelTv); searchTv = (TextView) findViewById(R.id.findPwDialogFindTv); cancelTv.setOnClickListener(this); searchTv.setOnClickListener(this);
2-2. onClick 메소드 구현
class 를 정의해준 부분에 클릭 리스너를 implements 합니다.
public class CustomDialog extends Dialog implements View.OnClickListener{
onClick
메소드를 Override 해줍니다.@Override public void onClick(View v) { switch (v.getId()){ case R.id.findPwDialogCancelTv: cancel(); break; case R.id.findPwDialogFindTv: String email = emailEt.getText().toString(); String name = nameEt.getText().toString(); dialogListener.onPositiveClicked(email,name); dismiss(); break; } }
onClick 메소드 안에서 각자가 원하는 기능을 구현하면됩니다.
추가
위 부분까지 하셨다면 클릭 이벤트 처리까지 완료됩니다.
하지만 다이얼로그의 결과 값이나
Dialog 를 호출한 Activity ( 혹은 Fragment) 에 리턴해주고 싶은 경우 아래 사항을 진행합니다.
2-4 DialogListener 작성
인터페이스인 DialogListener (이름은 편한걸로 하셔도 됩니다.) 를 작성합니다. 여기에선 Activity에서 어떤 메소드로 어떤 변수의 형태로 결과 값을 전달 받을지 정합니다.
이번 예제에선 다이얼로그에서 입력한 email 과 name 를 MainActivity 에서 다시 가공하고 싶어 매개 변수를 문자열로 하였습니다.
public interface MyDialogListener { public void onPositiveClicked(String email,String name); public void onNegativeClicked(); }
2-5. CustomDialog 에서 선언
CustomDialog 에서 인터페이스를 멤버 변수로 선언해줍니다.
public class CustomDialog extends Dialog implements View.OnClickListener{ private MyDialogListener dialogListener;
선언해준 MyDialogListener 를 초기화 해줄 메소드를 작성해줍니다.
public void setDialogListener(MyDialogListener dialogListener){ this.dialogListener = dialogListener; }
마지막으로 인터페이스의 메소드를 호출해 값을 MainActivity 로 넘겨줍니다.
case R.id.findPwDialogFindTv: String email = emailEt.getText().toString(); String name = nameEt.getText().toString(); dialogListener.onPositiveClicked(email,name); // 인터페이스의 메소드를 호출 dismiss(); break;
2-6. MainActivity 에서 선언
메인 액티비티에선 다이얼로그를 show() 하기 전에 리스너를 등록해주기만 하면 됩니다.
requestName = nameEt.getText().toString(); CustomDialog dialog = new CustomDialog(this,requestName); dialog.setDialogListener(new MyDialogListener() { // MyDialogListener 를 구현 @Override public void onPositiveClicked(String email, String name) { setResult(email,name); } @Override public void onNegativeClicked() { Log.d("MyDialogListener","onNegativeClicked"); } }); dialog.show(); break;
MyDialogListener()
를 구현하고 onPositivieClicked 메소드가 호출될 때 사용할 메소드를 정의합니다.
이메일과 이름을 TextView 에 보여주는 기능입니다.
private void setResult(String email,String name){
resultEmailTv.setText(email);
resultNameTv.setText(name);
}
3. Source Code
전체 소스 코드는 Github 에 연동해놨습니다.
[Custom dialog 시리즈]
clickListenerdialog다이얼로그안드로이드커스텀 다이얼로그custom dialog
2017-10-15 10:35 +0900