YouTube 上有一些关于如何在 XML android 中设置双后按退出的教程,但大多数都是 JAVA 的,没有一个是 Jetpack Compose 的。
那么我们如何在 Jetpack Compose 中设置双后按呢?
我的意思是,如果我们确定要退出,则在 Toast 中要求我们再次按回键。感谢您的帮助
此示例在第一次触摸时显示 Toast,并等待 2 秒再次触摸以退出应用程序,否则返回到空闲状态。
sealed class BackPress {
object Idle : BackPress()
object InitialTouch : BackPress()
}
@Composable
private fun BackPressSample() {
var showToast by remember { mutableStateOf(false) }
var backPressState by remember { mutableStateOf<BackPress>(BackPress.Idle) }
val context = LocalContext.current
if(showToast){
Toast.makeText(context, "Press again to exit", Toast.LENGTH_SHORT).show()
showToast= false
}
LaunchedEffect(key1 = backPressState) {
if (backPressState == BackPress.InitialTouch) {
delay(2000)
backPressState = BackPress.Idle
}
}
BackHandler(backPressState == BackPress.Idle) {
backPressState = BackPress.InitialTouch
showToast = true
}
}
@Thrancian 的回答似乎并没有按照我想要的方式进行。因为在我的测试中,我必须按三下后退按钮才能退出应用程序。
但我修改了它以满足我的需求。
@Composable
fun BackPressSample2() {
var exit by remember { mutableStateOf(false) }
val context = LocalContext.current
LaunchedEffect(key1 = exit) {
if (exit) {
delay(2000)
exit = false
}
}
BackHandler(enabled = true) {
if (exit) {
context.startActivity(Intent(Intent.ACTION_MAIN).apply {
addCategory(Intent.CATEGORY_HOME)
flags = Intent.FLAG_ACTIVITY_NEW_TASK
})
} else {
exit = true
Toast.makeText(context, "Press again to exit", Toast.LENGTH_SHORT).show()
}
}
}