안드로이드

[안드로이드/Android] Compose 에서 onBackPressed = BackHandler

알통몬_ 2023. 3. 16. 16:49
반응형

안드로이드에서 기존에 뒤로가기 버튼 눌렀을 때 동작을 커스텀 할 때 onBackPressed() 메소드를 오버라이딩했씁니다.

Jetpack Compose 에서는 어떻게 구현해야 할까요?

BackHandler 라는 녀석을 사용하면 되는데요.

예제 코드를 보겠습니다.

뒤로 가기 버튼을 빠르게 두 번 눌렀을 때 앱을 종료하는 코드입니다.

// 뒤로 가기 두 번 눌렀을 때 앱 종료
@Composable
fun BackOnPressed() {
    val context = LocalContext.current
    var backPressedState by remember { mutableStateOf(true) }
    var backPressedTime = 0L

    BackHandler(enabled = backPressedState) {
        if(System.currentTimeMillis() - backPressedTime <= 400L) {
            // 앱 종료
            (context as Activity).finish()
        } else {
            backPressedState = true
            Toast.makeText(context, "한 번 더 누르시면 앱이 종료됩니다.", Toast.LENGTH_SHORT).show()
        }
        backPressedTime = System.currentTimeMillis()
    }
}

실제 사용 시는 아래와 같이 사용하시면 됩니다.

    BackOnPressed()
    Scaffold() {
    	...
    }
반응형