在android jetpack compose中,状态更改时触发事件
我有一个网络视图和一个文本字段。我想在textField触发onGo操作或其值更改时触发web视图重新加载 下面是可变字符串:在android jetpack compose中,状态更改时触发事件,android,kotlin,android-webview,android-jetpack-compose,Android,Kotlin,Android Webview,Android Jetpack Compose,我有一个网络视图和一个文本字段。我想在textField触发onGo操作或其值更改时触发web视图重新加载 下面是可变字符串: var urlValue: MutableState<String> = mutableStateOf(DefaultUrl) 下面是web view的代码: AndroidView({ context -> WebView(context).apply { if(urlValue.value.isNotEmpty()) {
var urlValue: MutableState<String> = mutableStateOf(DefaultUrl)
下面是web view的代码:
AndroidView({ context ->
WebView(context).apply {
if(urlValue.value.isNotEmpty()) {
Log.i("TAG", "MainComposable: ${urlValue.value}")
loadUrl(urlValue.value)
}
webViewClient = object : WebViewClient() {
override fun shouldOverrideUrlLoading(
view: WebView,
url: String
): Boolean {
view.loadUrl(url)
return false
}
}
}
}
但是web视图不会重新加载新的URL。如何在go action触发器上加载新的URL?您可以使用
update
属性。比如:
AndroidView(
factory = {
WebView(it).apply {
this.webViewClient = WebViewClient()
this.loadUrl("defaultUrl")
}
},
update = {
it.loadUrl(urlValue)
},
)
检查以下代码以在WebView中渲染:
@SuppressLint("SetJavaScriptEnabled")
@Composable
fun WebPageScreen(urlToRender: String) {
AndroidView(factory = {
WebView(it).apply {
webViewClient = object : WebViewClient() {
override fun shouldOverrideUrlLoading(
view: WebView?,
request: WebResourceRequest?
): Boolean {
return false
}
}
}
}, update = {
it.loadUrl(urlToRender)
})
}
AndroidView()
composable函数的update
块在布局膨胀后被调用
@SuppressLint("SetJavaScriptEnabled")
@Composable
fun WebPageScreen(urlToRender: String) {
AndroidView(factory = {
WebView(it).apply {
webViewClient = object : WebViewClient() {
override fun shouldOverrideUrlLoading(
view: WebView?,
request: WebResourceRequest?
): Boolean {
return false
}
}
}
}, update = {
it.loadUrl(urlToRender)
})
}