Сегодня я столкнулся с проблемой WebView
внутри Fragment
с использованием Android Navigation Component
.
В моем случае в Fragment1
есть кнопка под WebView
. Пользователь должен прокрутить вниз, чтобы щелкнуть по нему. После нажатия на него открывается новый пункт назначения (Fragment2
). Затем, когда пользователь возвращается к Fragment1
, WebView
перезагружается, и область просмотра снова прокручивается вверх.
Это очень раздражает. Пользователь мог прокручиваться в течение нескольких минут, и он всегда бросает его на самый верх после возвращения. Можно ли как-то предотвратить перезагрузку / прокрутку наверх?
Пример кода может быть таким простым:
class Fragment1 : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
webView.loadData(getString(R.string.some_very_long_html), "text/html", "UTF-8")
buttonBelowWebView.setOnClickListener {
navigateToFragment2()
}
}
}
Если WebView
содержит видео, загрузка может занять до 5 секунд. Это ужасный опыт.
Я пытался добавить флаг для загрузки только один раз, но затем WebView
пуст при возврате из Fragment2
:
class Fragment1 : Fragment() {
var loaded = false
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
if(!loaded) {
webView.loadData(getString(R.string.some_very_long_html), "text/html", "UTF-8")
loaded = true
}
}
}
Обратите внимание, что в реальной жизни я использую ViewModel
s и наблюдаю данные из остальных API, но проблема остается той же.
Кроме того, пример кода, который я предоставил, написан на Kotlin, но если в Java есть решение, то оно также приветствуется.
Можно ли не перезагружать WebView
и сбрасывать позицию прокрутки при переходе назад от вложенного пункта назначения?