首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Composable之间的通信

Composable之间的通信
EN

Stack Overflow用户
提问于 2021-06-28 23:20:01
回答 1查看 165关注 0票数 0

我已经创建了WebView,这是一个可组合的安卓视图。它是屏幕的脚手架的内容,脚手架本身有TopBar作为一个动作栏,在左边有一个后退按钮,我想处理onClicked后退按钮,以检查WebView是否可以像Android View上的正常行为一样返回。问题是如何创建一个了解WebView的onClicked事件?

代码:

代码语言:javascript
运行
复制
Scaffold(
    topBar = {
        CustomAppBar(
            title = title,
            onBackPressed = {
                // check webview.canGoBack()
                // if yes, just go back
                // if not, finish activity
            },
        )
    },
    content = {
        CustomWebView(
            url = originalUrl,
        )
    }
)
EN

回答 1

Stack Overflow用户

发布于 2021-06-29 04:28:42

你需要在一个变量中跟踪它,比如说在脚手架之外。就像这样

代码语言:javascript
运行
复制
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视图中修改该变量。将变量定义在scaffold上方的原因是为了确保可以从内容块中访问它。

每当触发器发生变化时,webView就会被重新组合,因为它正在读取这个变量。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68165980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档