Android/Jetpack Compose

[Jetpack Compose] BackHandler : 뒤로가기 감지

chattymin 2023. 8. 10. 16:01
728x90
반응형

어플을 사용하다보면 뒤로가기를 눌렀을 때 

이런 창이 뜰때가 있다.

 

이건 어떻게 하는걸까?

 

 

뒤로가기를 감지하고, 특정 동작을 작동시켜야 한다. 그렇기때문에 사용하는 것이 BackHandler이다.

@Composable
fun BackOnPressed() {
    val context = LocalContext.current
    var backPressedTime = 0L

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

 

내가 처음본 코드에서는 아래와 같은 식으로 코드가 작성되어있었다.

@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()
    }
}

그런데 나는 여기서 의문점이 있었다. backPressedState의 값은 항상 true가 아닌가??

왜 굳이 선언하고 true로 변화를 줘야하지?

 

그래서 난 true로 하드코딩 하는방식으로 바꿔서 썼다.

 

왜 변수 선언을 하고 아래에서 true를 할당해주는 방식을 사용하는지 이유를 아시는 분은 댓글 작성해주시면 감사하겠습니다 🙇🏻‍♂️

 

 

여튼 저렇게 작성을 하고 사용하고자 하는 페이지에서 해당 함수를 호출해주기만 하면 된다.

 

 

그럼 여기서 활용을 해보자. 뒤로가기 키를 눌렀을때 원하는 작동을 시켜버릴 수 있다.

 

@Composable
fun BackOnPressed() {
    BackHandler(enabled = true) {
    	//원하는 작업
    }
}

이렇게 한다면 뒤로가기를 눌렀을 때 원하는 작업을 시킬 수 있다.

728x90
반응형