본문 바로가기
안드로이드 코틀린

[Kotlin] onBackPressed() deprecated , 대체할 메서드는?

by teamnova 2022. 12. 12.
728x90

안녕하세요.

오늘은 deprecated 된 onBackPressed()를 어떤 메서드로 대체할 수 있는지에 대해 알아보겠습니다. 

 

onBackPressed () 란?

액티비티에서 사용자가 뒤로 가기 키를 눌렀을때 이를 감지하여 호출되는 메서드입니다. 

주로 뒤로 가기 클릭 시 행동을 제어할 때 사용했습니다. 

 

하지만 API 레벨 33부터 더이상 사용되지 않는다고 안드로이드 디벨로퍼 공식문서에 명시되었고 

대신  OnBackInvokedCallback 또는 androidx.activity.OnBackPressedCallback 를 사용하기를 권고하고 있습니다. 

 

FragmentActivity AppCompatActivity의 기본 클래스인 

ComponentActivity를 사용하면 OnBackPressedDispatcher(getOnBackPressedDispatcher()를 호출하여 가져옴)를 사용하여 뒤로 버튼의 동작을 제어할 수 있습니다.

 

OnBackPressedDispatcher 사용법

사용자가 뒤로가기 버튼을 탭하거나 뒤로 가기 제스쳐를 했을때(제스쳐가 활성화되어 있을때) 콜백이 호출되고 활성화 됩니다. 

/**
* 프래그먼트인 경우 + 람다식으로 처리
*/
class MyFragment : Fragment() {

   private val TAG = this.javaClass.simpleName

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

		... 
        // 이 콜백은 MyFragment가 최소한 Started일 때만 호출됩니다.
        val callback = requireActivity().onBackPressedDispatcher.addCallback(this) {
            // 뒤로 버튼 이벤트 처리
            Log.e(TAG, "뒤로가기 클릭")
        }

    }
    ...
}


/**
* 액티비티인 경우 + 콜백메서드 따로 생성하여 붙여주기 
*/

class MyActivity : AppCompatActivity() {

    private val TAG = this.javaClass.simpleName
    //콜백 인스턴스 생성
    private val callback = object : OnBackPressedCallback(true) {
        override fun handleOnBackPressed() {
            // 뒤로 버튼 이벤트 처리
            Log.e(TAG, "뒤로가기 클릭")
        }
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_my)

        this.onBackPressedDispatcher.addCallback(this, callback) //위에서 생성한 콜백 인스턴스 붙여주기
    }
}
  • addCallback()을 통해 여러 개의 콜백을 제공할 수 있습니다. 이렇게 하면 콜백은 추가된 순서의 역순으로 호출되며 마지막으로 추가된 콜백이 뒤로 버튼 이벤트를 처음으로 처리할 기회를 얻게 됩니다. 예를 들어, one, two, three라는 이름의 콜백 세 개를 순서대로 추가하면 각각 three, two, one의 순서로 호출됩니다.

 

*참고한 공식문서 

https://developer.android.com/guide/navigation/navigation-custom-back?hl=ko

 

맞춤 뒤로 탐색 기능 제공  |  Android 개발자  |  Android Developers

맞춤 뒤로 탐색 기능 제공 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 뒤로 탐색 기능은 사용자가 이전에 방문한 화면 기록을 통해 뒤로 이동하는 기능

developer.android.com

https://developer.android.com/reference/androidx/activity/OnBackPressedDispatcher

 

OnBackPressedDispatcher  |  Android Developers

androidx.car.app.managers

developer.android.com