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
https://developer.android.com/reference/androidx/activity/OnBackPressedDispatcher
'안드로이드 코틀린' 카테고리의 다른 글
[Kotlin][Android] Splash Screen(로딩 화면) 구현하기 (2) | 2022.12.23 |
---|---|
[Kotlin][Android] Jetpack Compose로 진행중 애니메이션 만들어보기 (0) | 2022.12.18 |
[Kotlin][Android] 키보드 열고 닫을 때 view를 부드럽게 이동시키기 (0) | 2022.12.03 |
[Kotlin][Android] DataBinding + RecyclerView 함께 사용해보기 (0) | 2022.11.18 |
[Kotlin][Android] Jetpack Compose에서 폰트 추가해서 사용하기 (0) | 2022.11.03 |