본문 바로가기

TIL

[Sub TIL] Kotlin onBackPressed() deprecated된 이유와 대체재

Topic =  OnBackPressedDispatcher와 OnBackPressedCallBack 으로 뒤로가기 버튼 이벤트 정의

 

 

 


 

Why - onBackPressed 가 deprecated 된 이유와 대체

 

 

Android Studio  13 ( API Level 33 ) 부터 onBackPressed() 메소드가 deprecated 되었으며 2023년 12월 31일 이후로는 지원 되지 않는다고 한다. deprecated 된 이유로는 화면 제스쳐를 통한 앱 화면 전환 기능의 지원과, onBackPressed로는 앱의 특정 상태에 따라 다른 동작을 제어하기가 어려운 점으로 인해 deprecated 되었다.

 

   Android Studio의 onBackPressed()는 Fragment에서는 지원하지 않아 Fragment에서 뒤로가기 이벤트를 정의하려면 Androidx LifeCycler 라이브러리에서 제공하는 OnBackpressedDispatcher와 OnBackPressedCallback을 사용하여 Activity를 확장하지 않고도 구현할 수 있다. 해당 메소드를 통해 Activity 내부 구현에 의존하지 않고, Fragment 별로 각각 다른 이벤트를 적용할 수 있다.

 

   Google에서도 onBackPressed를 사용하는 방법보다는 OnBackPressendCallback와 OnBackInvokedCallback을 통한 뒤로가기 버튼 클릭 이벤트를 정의하는 것을 권장한다. OnBackInvokedCallback는 android 13 ( API Level 33 ) 이상 부터 manifest의 application 속성 내부에 InvokedCallback 속성을 true로 설정한 후 onBackInvokedCallbackd을 사용할 수 있다.

 

 

 

 

 

 

OnBackpressedDispatcher을 통한 OnBackPressedCallback 사용 방법

 

 override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        mContext = this
        binding = ActivityMainBinding.inflate(layoutInflater).also {
            setContentView(it.root)
        }
        
        // 콜백 지정 
        this.onBackPressedDispatcher.addCallback(this,onBackPressedCallback)
        
        ...
        
        
    }   

    // 콜백 정의
    private val onBackPressedCallback = object : OnBackPressedCallback(true) {
        override fun handleOnBackPressed() {
            // 뒤로가기 버튼 클릭 이벤트
        }
    }

 

 

 

 

 


[Reference]

 

// BackPressedCallback

https://itstory1592.tistory.com/128

https://velog.io/@soyoung-dev/AndroidKotlin-onBackPressed-deprecated-OnBackPressedCallback-%EB%B3%80%EA%B2%BD

https://onlyfor-me-blog.tistory.com/522

https://stackoverflow.com/questions/72634225/onbackpressed-is-deprecated-what-is-the-alternative