본문 바로가기

TLI/Android

OnBackPressedCallback(true)

개요

  • 하단의 뒤로가기 버튼은 Activity에 있는 것이므로 Activity의 `onBackPressedDispatcher`에 callback을 추가해줘야 한다.
  • `onBackPressedDispatcher.onBackPressed()`를 호출했을 때 addCallback된 callBack 메서드가 없으면 default callback이 실행된다.
    • 추가 된 것이 있으면 그 것을 실행하는데 그 안에서 `onBackPressedDispatcher.onBackPressed()`을 호출하면 무한루프에 빠지게 된다.
  • `OnBackPressedCallback(true)`
    • isEnabled = true 라는 의미
    • true인 callback 메서드만 실행이 가능하다.
    • false로 바꿔주면 다시 호출되지 않는다.
    private val back_pressed_call_back = object : OnBackPressedCallback(true) {
        override fun handleOnBackPressed() {
//            this.handleOnBackPressed()
//            val contactListFragment = requireActivity().supportFragmentManager.fragments[0]
            backCount++
            Log.d("ContactDetailFragment", "click back button")
            if(backCount == 7) {
                isEnabled = false
            }
            requireActivity().onBackPressedDispatcher.onBackPressed()
//            if(isEnabled) {
//                isEnabled = false
//                requireActivity().onBackPressedDispatcher.onBackPressed()
//            }
        }
        
        override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
       		// ...
        	requireActivity().onBackPressedDispatcher.addCallback(requireActivity(), back_pressed_call_back)
        }
    }

'TLI > Android' 카테고리의 다른 글

border line 만들기  (0) 2024.08.28
ConstraintLayout의 weight 비율 조정  (0) 2024.08.26
ListAdapter의 holder 재사용  (0) 2024.08.24
Retrofit  (0) 2024.08.09
Shared Preference / Room  (0) 2024.08.06