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