Ran*_*mar 54 android android-jetpack-compose
问题:
在我的撰写页面 - >我有元素列表,如果我按任何人,我将在同一页面中显示子内容(隐藏主要内容并显示子内容)
如果我按顶部栏中的后退按钮,我会按照自己的逻辑处理自己。
但我无法处理系统后压。
问题 :
有什么方法可以覆盖 Jetpack Compose 中的 onBackPressed() 吗?
我的代码:
@Composable
private fun AnimationRootView() {
//Main content list
Column(){
}
//Sub content list
Column(){
if(detail1Clicked)
Detail1()
if(detail2Clicked)
Detail2()
}
....
....
}
Run Code Online (Sandbox Code Playgroud)
Phi*_*hov 139
您可以使用BackHandler:
@Composable
fun TestScreen() {
BackHandler {
// your action
}
}
Run Code Online (Sandbox Code Playgroud)
为了获得与调用相同的效果super.onBackPressed(),最组合的方式是enabled根据您的状态使用参数:
BackHandler(
// your condition to enable handler
enabled = isOverlayPresented
) {
// your action to be called if back handler is enabled
isOverlayPresented = false
}
Run Code Online (Sandbox Code Playgroud)
如果您需要同时处理后按操作并执行默认后退操作,则可以使用LocalOnBackPressedDispatcherOwner。由于BackHandler也在幕后使用它,您需要等待下一次重组以确保您的后台处理程序被禁用,然后您可以执行onBackPressed:
val onBackPressedDispatcher = LocalOnBackPressedDispatcherOwner.current?.onBackPressedDispatcher
var backPressHandled by remember { mutableStateOf(false) }
val coroutineScope = rememberCoroutineScope()
BackHandler(enabled = !backPressHandled) {
println("back pressed")
backPressHandled = true
coroutineScope.launch {
awaitFrame()
onBackPressedDispatcher?.onBackPressed()
backPressHandled = false
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
29339 次 |
| 最近记录: |