我有一个Fragment
,里面有ViewPager
,其中包含3个标签。我已经使用 Jetpack导航来处理导航。根据Jetpack导航的本机行为,在第一个标签中,我有一个Fragment
和WebView
,WebView
每次导航到另一个片段时都会重新创建视图。
这是问题所在,每次我导航回到Fragment
Webview
时,它都会加载URL。使用实时数据无法处理。
我尝试缓存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")
}
}
内容,但这只是使加载速度更快,但不是立即进行的。
这是我的代码段
MyFragment.kt
[a1].Resize(UBound(arrayData) - LBound(arrayData) + 1) = Application.Transpose(arrayData)
任何帮助都将得到感谢,谢谢!
答案 0 :(得分:2)
我通过添加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()
}
}