주요 내용으로 건너뛰기

[안드로이드] 다이얼로그 프래그먼트(Dialog Fragment) 사용하기(2) - 액티비티와 통신하기

[안드로이드] 다이얼로그 프래그먼트(Dialog Fragment) 사용하기(1) - 커스텀 다이얼로그 만들기

직전 포스팅에서는 액티비티 상에서 다이얼로그 프래그먼트를 이용한 커스텀 다이얼로그를 띄우는 방법을 알아봤다. 그런데 커스텀 다이얼로그까지 만드는 사람이 그냥 화면 하나 띄우는 것으로 만족해서야 쓰나. 다이얼로그와 다이얼로그를 띄운 액티비티간에 통신하는 방법을 알아보자. 아, 지금 이게 android support library v4에서 지원하는 다이얼로그 프래그먼트 얘기인건 다 알고 있겠지? 일단 이전 포스팅에서 만들었던 TestDialogFragment 클래스부터 봅시다.

    
public class TestDialogFragment extends DialogFragment {
    
    ...
    
    // 리스너 인터페이스 선언
    public interface TestDialogFragmentListener {
        public void onTestDialogClick (DialogFragment dialog, String someData); 
    }
    
    // 리스너 인터페이스의 빈 객체 선언
    TestDialogFragmentListener testDialogFragmentListener;
    
    // 리스너 인터페이스와 액티비티를 연결
    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        try {
            testDialogFragmentListener = (TestDialogFragmentListener) activity;    
        }
        catch (ClassCastException e) {
            throw new ClassCastException(activity.toString()
            + " must implement TestDialogFragmentListener");
        }
    }
    
    // 리스너 인터페이스 속의 메서드 작동(연결된 액티비티와 통신)
    public void someAction () {
        testDialogFragmentListener.onTestDialogClick(
            TestDialogFragment.this, "Some Data");
    }
    
    ...

}

TestDialogFragment 클래스 안에 리스너 역할을 할 인터페이스를 만든다. 여기서는 단순히 TestDialogFragmentListener라고 명명했다. 그리고 이 안에는 다이얼로그에서 수행하는 어떤 액션에 따라 액티비티와 통신할 메서드를 선언하는데, 이 메서드에는 기본적으로 DialogFragment를 파라메터로 넣어주어야 한다. 이후 해당 인터페이스의 빈 객체를 선언하고, onAttach메서드를 Override하여 인터페이스 객체와 액티비티를 연결해준다.

이 때 연결이 잘못되어 ClassCastException이 일어날 수 있으니 예외처리를 해 줘야 한다. 어떤 액티비티에서 일어난 것인지 추적하여 해당 액티비티가 인터페이스를 구현해야 한다는 메시지를 보내준다.

이제 TestDialogFragment 클래스에서 액티비티와 통신하기 원하는 시점에 인터페이스 객체를 불러들여 실행하고 싶은 메서드를 불러오면 된다. 물론 DialogFragment 파라메터를 넣는 곳에는 현 다이얼로그 프래그먼트.this를 넣어주면 만사 OK. 이제 액티비티(이전 포스팅의 CallDialogActivity)를 보자.

public class CallDialogActivity extends Activity 
    // 위에서 만든 리스너 인터페이스를 구현
    implements TestDialogFragmentListener {
    
    ...
    
    @Override
    public void onTestDialogClick(DialogFragment dialog, String someData) {
        // Action for someData
    }
    
    ...
    
}

액티비티에서 할 일은 훨씬 간단하다. 다이얼로그 프래그먼트 클래스에서 만든 리스너 인터페이스를 구현하고, Override된 메서드에서 전달받은 데이터로 무엇을 할지만 결정하면 된다. 예를 들어 어떤 TextView의 값을 변경한다거나 하면 되는 것. 모자란 설명에 대해서는 리플로 문의해주시라.

안드로이드 애플리케이션 개발자

구본욱 님의 창작활동을 응원하고 싶으세요?

댓글 2

SNS 계정으로 간편하게 로그인하고 댓글을 남겨주세요.
#15
[안드로이드] 다이얼로그 프래그먼트(Dialog Fragment) 사용하기(1) - 커스텀 다이얼로그 만들기
#17
[iOS] 개발 참고 포스팅