使用 Web View 的喷气背包导航无法正常工作



我有一个Fragment里面有ViewPager,里面有3个选项卡。我使用喷气背包导航来处理导航。在第一个选项卡中,我有一个FragmentWebView,根据 Jetpack 导航的本机行为,每次我们导航到另一个片段时,它都会重新创建视图。

这就是问题所在,每次我导航回WebViewFragment时,它都会加载 URL。这无法使用实时数据处理。

我尝试缓存Webview内容,但它只是使加载速度更快,但不是立即的。

这是我的代码片段

MyFragment.kt

class MyFragment : BaseViewModelFragment<MyViewModel>(), View.OnClickListener {
override fun getContentResource(): Int = R.layout.fragment_my
override fun buildViewModel(): MyViewModel {
return ViewModelProviders.of(this, viewModelFactory)[MyViewModel::class.java]
}
override fun initLiveDataObservers() {
super.initLiveDataObservers()
}
override fun initViews() {
super.initViews()
setupWebView()
}
private fun setupWebView() = with(webView) {
settings.domStorageEnabled = true
settings.setAppCachePath("/data/data/" + activity?.packageName + "/cache")
settings.setAppCacheEnabled(true)
settings.cacheMode = WebSettings.LOAD_CACHE_ELSE_NETWORK
webViewClient = MyWebviewClient()
webChromeClient = MyChromeClient()
loadUrl("http://google.com")
}
}

任何帮助将得到赞赏,提前感谢!

我通过添加运行时来修复它WebView

class MyFragment : BaseViewModelFragment<MyViewModel>(), View.OnClickListener {
private val myWebview by lazy {
WebView(requireContext().applicationContext).apply {
webViewClient = MyWebviewClient()
webChromeClient = MyChromeClient()
}
}
override fun getContentResource(): Int = R.layout.fragment_home
override fun buildViewModel(): MyViewModel {
return ViewModelProviders.of(this, viewModelFactory)[MyViewModel::class.java]
}
override fun initLiveDataObservers() {
super.initLiveDataObservers()
}
override fun initViews() {
super.initViews()
container.addView(myWebview, ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT)
)
}
override fun onDestroyView() {
(myWebview.parent as ViewGroup).removeView(myWebview)
super.onDestroyView()
}
}

最新更新