Android - 프래그먼트에서 Back 버튼 이벤트 처리

유의선·2024년 4월 12일

Activity에서 Back 버튼이 눌렸을 때의 이벤트를 구현할 때는 onBackPressed() 함수를 재정의하는것으로 간단하게 구현할 수 있다.

하지만 한 Activity에 여러 Fragment를 사용하게 되면서 각 Fragment별로 Back 버튼 이벤트를 정의할 수 있다면 편할것이라 생각해 방법을 찾아보았다.

또한 이 방법은 onBackPressed() 함수가 Duplicated 되었기 때문에 Activity에서도 이 방법을 사용하는 편이 좋아 보인다.


getOnBackPressedDispatcher().addCallback()

액티비티의 getOnBackPressedDispatcher()의 addCallback(LifecycleOwner, onBackPressedCallback)
메소드를 사용해 이벤트를 구현할 수 있다.

LifecycleOwner는 callback 메소드가 따라갈 owner의 Lifecycle 를 지정해준다.
즉 넣어줄 callback 메소드가 어느 화면에서 적용될 지 설정한다.
이벤트를 정의해줄 액티비티나 프래그먼트 자신을 넣어주면 된다.

onBackPressedCallback에 Back 버튼이 눌렸을 때 발생할 callback 메소드를 넣어준다.


사용 예시는 다음과 같다.

    @Override
    public void onAttach(@NonNull Context context) {
        super.onAttach(context);

        requireActivity().getOnBackPressedDispatcher().addCallback(this, onBackPressedCallback);
    }

프래그먼트에서 사용하는 예이기 때문에 requireActivity()로 부모 Activity를 받아와 사용하였다.

onBackPressedCallback 메소드는 다음처럼 정의할 수 있다.

    private final OnBackPressedCallback onBackPressedCallback = new OnBackPressedCallback(true) {
        @Override
        public void handleOnBackPressed() {
            ...
        }
    };

handleOnBackPressed() 메소드 안에 Back 버튼이 눌렸을 때 작동할 코드를 작성해주면 된다.

0개의 댓글