我之前通过重写 Activity 类中的
onSaveInstanceState(outState: Bundle)
方法将 WebView 状态保存在 Android 应用程序中,如下所示:
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
webView.saveState(outState)
}
现在,我正在迁移我的应用程序以使用 Jetpack Compose,我想知道如何实现相同的功能来保存和恢复 WebView 状态。
在 Jetpack Compose 中保存和恢复 WebView 状态可以通过使用
rememberSaveable
状态来保留 Bundle 并利用 AndroidView
可组合项来完成。下面是一个完整的示例,展示了如何实现这一目标:
@Composable
fun WebViewScreen(
startUrl: String,
modifier: Modifier = Modifier,
) {
val bundle: Bundle = rememberSaveable { bundleOf() }
AndroidView(
factory = { context ->
WebView(context)
},
modifier = modifier,
onRelease = { webView ->
webView.saveState(bundle)
},
update = { webView ->
if (bundle.isEmpty) {
webView.loadUrl(startUrl)
} else {
webView.restoreState(bundle)
}
}
)
}