gpt4 book ai didi

android - Jetpack Compose WebView 处理返回导航并转到上一页

转载 作者:行者123 更新时间:2023-12-04 23:53:22 25 4
gpt4 key购买 nike

我正在使用 Jetpack Compose 并拥有 WebView包裹在 AndroidView可组合的,如下所示:

AndroidView(modifier = modifier, factory = { context ->
WebView(context).apply {
layoutParams = ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT
)
webViewClient = WebViewClient()
settings.javaScriptEnabled = true
}
}, update = { webView -> webView.loadUrl(url) })
在传统方式中,我们可以添加 OnBackPressedDispatcherActivity拦截后按并在 WebView 内导航通过 viewBinding 访问它,例如使用 WebView 的函数喜欢 goBack()并检查您是否可以返回 canGoBack() .
但是我们如何使用这种 Jetpack Compose 方法实现相同的目标呢?

最佳答案

将 WebView 分配给外部变量似乎没有任何问题,所以这就是我在这里所做的。

var backEnabled by remember { mutableStateOf(false) }
var webView: WebView? = null
AndroidView(
modifier = modifier,
factory = { context ->
WebView(context).apply {
layoutParams = ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT
)
webViewClient = object : WebViewClient() {
override fun onPageStarted(view: WebView, url: String?, favicon: Bitmap?) {
backEnabled = view.canGoBack()
}
}
settings.javaScriptEnabled = true

loadUrl(url)
webView = this
}
}, update = {
webView = it
})

BackHandler(enabled = backEnabled) {
webView?.goBack()
}
WebViewClient监听 onPageStarted检查 WebView 是否可以向后导航,然后更新 backEnabled .这会导致重新组合,从而切换 BackHandler开启和关闭。
我也搬了 loadUrlupdate函数并进入 factory因为每次重组时都会调用更新,而工厂只调用一次。根据您的实现,这可能相关也可能不相关。

关于android - Jetpack Compose WebView 处理返回导航并转到上一页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70767957/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com