使用WebView的Jetpack导航无法正常工作

时间:2019-03-06 12:01:21

标签: android android-viewpager android-webview android-jetpack android-architecture-navigation

我有一个Fragment,里面有ViewPager,其中包含3个标签。我已经使用 Jetpack导航来处理导航。根据Jetpack导航的本机行为,在第一个标签中,我有一个FragmentWebViewWebView每次导航到另一个片段时都会重新创建视图。

这是问题所在,每次我导航回到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)

任何帮助都将得到感谢,谢谢!

1 个答案:

答案 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()
    }
}