我如何在Jetpack Compose中禁用后退按钮,或者不希望用户返回到之前的屏幕?
我尝试了下面的代码,但仍然可以返回到以前的屏幕。
BackHandler(enabled = false) {
//do nothing
}
我如何在Jetpack Compose中禁用后退按钮,或者不希望用户返回到之前的屏幕?
我尝试了下面的代码,但仍然可以返回到以前的屏幕。
BackHandler(enabled = false) {
//do nothing
}
您应该将enabled
设置为true
,以控制返回按钮。然后在您的NavHost
中从当前目标
调用BackHandler
NavHost(
navController = navController,
startDestination = startDestination
) {
composable(
route = "Your Destination Route"
) {
BackHandler(true) {
// Or do nothing
Log.i("LOG_TAG", "Clicked back")
}
YourDestinationScreen()
}
}
@Composable
fun DisableBackHandler(
isDisabled: Boolean,
content: @Composable () -> Unit,
) {
CompositionLocalProvider(
values = LocalOnBackPressedDispatcherOwner.current?.let { parentDispatcherOwner ->
arrayOf(
LocalOnBackPressedDispatcherOwner provides if (isDisabled) {
DummyOnBackPressedDispatcherOwner(parentDispatcherOwner.lifecycle)
} else {
parentDispatcherOwner
},
)
} ?: arrayOf(),
content = content,
)
}
private class DummyOnBackPressedDispatcherOwner(
override val lifecycle: Lifecycle,
) : OnBackPressedDispatcherOwner {
override val onBackPressedDispatcher: OnBackPressedDispatcher
get() = OnBackPressedDispatcher()
}
它只针对您的组合的一部分禁用了返回处理。
enabled = true
才能让你的“什么也不做”的BackHandler
起作用并捕获返回键(然后什么也不做)。 - Maciej Ciemięga