Android Fragment 뒤로가기 처리 (백키처리) onBackPressedDispatcher

개요

Android 앱에서 뒤로가기 버튼은 중요한 내비게이션 요소입니다.

특히 Fragment에서는 뒤로가기 동작을 사용자 정의하거나 특정 작업을 수행해야 할 때가 많습니다. 이 글에서는 Android의 onBackPressedDispatcher를 사용하여 Fragment에서 뒤로가기 동작을 처리하는 방법을 자세히 설명합니다.


1. onBackPressedDispatcher란?

onBackPressedDispatcher는 Android의 뒤로가기 이벤트를 관리하는 API입니다.


2. 기본 사용법: Fragment 에서 뒤로가기 이벤트 처리

Fragment에서 뒤로가기 이벤트를 처리하려면 requireActivity().onBackPressedDispatcher를 사용해야 합니다.

2.1 개념

callback.isEnabled = false // 비활성화
callback.isEnabled = true  // 활성화

2.2 뒤로가기 예제의 코드 설명을 간결하게 재구성

class DoubleBackExitFragment : Fragment() {

    private var lastBackPressedTime: Long = 0 // 마지막 뒤로가기 누른 시간
    private lateinit var callback: OnBackPressedCallback
    private var isConditionMet = false // 조건을 만족하는지 여부

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // 뒤로가기 콜백 정의
        callback = object : OnBackPressedCallback(true) {
            override fun handleOnBackPressed() {
                if (isConditionMet) {
                    // 조건이 만족되면 콜백 비활성화 후 기본 뒤로가기 동작
                    isEnabled = false
                    requireActivity().onBackPressed() // 기본 뒤로가기 호출
                } else {
                    // 두 번 눌러야 종료되는 로직
                    val currentTime = System.currentTimeMillis()
                    if (currentTime - lastBackPressedTime < 2000) {
                        requireActivity().finish() // 앱 종료
                    } else {
                        lastBackPressedTime = currentTime
                        Toast.makeText(requireContext(), "한 번 더 누르면 종료됩니다.", Toast.LENGTH_SHORT).show()
                    }
                }
            }
        }

        // 콜백 추가
        requireActivity().onBackPressedDispatcher.addCallback(this, callback)
    }

    // 특정 조건에 따라 콜백 활성화/비활성화 변경
    fun setConditionMet(isMet: Boolean) {
        isConditionMet = isMet
        callback.isEnabled = !isMet // 조건이 만족되면 콜백을 비활성화
    }
}

코드 설명

  1. isConditionMet 변수
    • 특정 조건이 만족되었는지 여부를 저장합니다.
    • true로 설정되면, 뒤로가기 콜백이 비활성화됩니다.
  2. 콜백 비활성화 로직
    • isConditionMet가 true일 경우 isEnabled = false를 설정해 콜백을 비활성화합니다.
    • 이후, requireActivity().onBackPressed()를 호출해 기본 뒤로가기 동작을 실행합니다.
  3. setConditionMet 메서드:
    • 외부에서 조건을 변경할 수 있도록 메서드를 제공합니다.
    • 조건에 따라 callback.isEnabled를 활성화하거나 비활성화합니다.

4. 결론

onBackPressedDispatcher는 Fragment에서 뒤로가기 동작을 세밀하게 제어할 수 있는 강력한 도구입니다.




Related Posts