我创建了 WebView,它是可组合的 Android 视图。它是屏幕的 Scaffold 的内容,Scaffold 本身有 TopBar 作为操作栏,左侧有一个后退按钮,我想处理后退按钮的 onClicked 以检查 WebView 是否可以像正常一样返回Android 视图上的行为。问题是如何做一个onClicked事件来知道WebView?
代码:
Scaffold(
topBar = {
CustomAppBar(
title = title,
onBackPressed = {
// check webview.canGoBack()
// if yes, just go back
// if not, finish activity
},
)
},
content = {
CustomWebView(
url = originalUrl,
)
}
)
答案 0 :(得分:1)
你需要在一个变量中跟踪它,比如说在脚手架之外。类似的东西
var canGoBack by mutableStateOf (false)
var goBackTrigger by mutableStateOf (false)
Scaffold(
topBar = {
CustomAppBar(
title = title,
onBackPressed = {
if(canGoBack){
goBackTrigger = true
}
else{
//Finish activity
}
},
)
},
content = {
CustomWebView(
url = originalUrl,
goBackTrigger = goBackTrigger
)
}
)
@Composable
fun CustomWebView(
url: String,
goBackTrigger: Boolean
){
//Add this where you can access the webView methods
if(goBackTrigger){
webView.goBack()
goBackTrigger = false
//You might need to update the url here as well. See to it.
}
}
这个想法是将状态存储在一个变量中,并在满足条件时从内容 Web 视图中修改该变量。在脚手架上方定义变量的原因是为了确保它可以从内容块内访问。
每当触发器发生变化时,webView 就会重新组合,因为它正在读取这个变量。