如何在 Jetpack Compose 中设置双击退出?

问题描述 投票:0回答:2

YouTube 上有一些关于如何在 XML android 中设置双后按退出的教程,但大多数都是 JAVA 的,没有一个是 Jetpack Compose 的。

那么我们如何在 Jetpack Compose 中设置双后按呢?

我的意思是,如果我们确定要退出,则在 Toast 中要求我们再次按回键。感谢您的帮助

kotlin android-jetpack-compose android-jetpack
2个回答
8
投票

此示例在第一次触摸时显示 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
    }
}


2
投票

@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()
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.