Jetpack Navigation с WebView не работает должным образом - PullRequest
2 голосов
/ 06 марта 2019

У меня есть Fragment с ViewPager внутри, который содержит 3 вкладки.Я использовал Jetpack Navigation для управления навигацией.На первой вкладке у меня есть Fragment с WebView, в соответствии с собственным поведением навигации Jetpack, он воссоздает представление каждый раз, когда мы переходим к другому фрагменту.

Вот проблема, он загружает URL каждый развремя, когда я возвращаюсь к WebView Fragment.Это не может быть обработано с использованием оперативных данных.

Я пытался кэшировать 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")
    }
}

Любая помощь будет приветствоваться, спасибо заранее!

1 Ответ

2 голосов
/ 18 марта 2019

Я исправил это, добавив 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()
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...