Composable 之间的通信

时间:2021-06-28 15:20:00

标签: android android-jetpack-compose

我创建了 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,
        )
    }
)

1 个答案:

答案 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 就会重新组合,因为它正在读取这个变量。