TL; DR
Вы должны обрабатывать этот случай внутри onBackPressed()
метода непосредственно в вашей деятельности (не во фрагменте).
Вы обрабатываете эту ситуацию многими способами, например, с помощью :
Если вы будете использовать WebView
непосредственно внутри занятия
Вы можете использовать что-то простое, например:
override fun onBackPressed() {
if (webView.canGoBack()) {
// If possible - go back in WebView
webView.goBack()
} else {
// If NOT possible - just handle going back as always
super.onBackPressed()
}
}
Где webView
- это ваше представление внутри XML файла макета (накачано в методе onCreate()
).
Но если у вас есть WebView
внутри фрагмента, вы должны:
1) Создать новые методы в вашем Фрагмент, который
возвращает информацию «может go вернуться в WebView» или нет.
"скажем" WebView, который должен go назад
Я немного исправил ваш Android поток (используя onCreateView
) и использовал Kotlin Расширение для установки свойств в WebView
class HomeFragment : Fragment() {
/**
* New method, allowing as to check "can we go back in WebView or not"
*/
fun webViewCanGoBack() = webview.canGoBack()
/**
* New method, saying WebView that should go back
*/
fun webViewGoBack() = webview.goBack()
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? = inflater.inflate(R.layout.fragment_home, container, false)
@SuppressLint("SetJavaScriptEnabled")
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
webview.run {
settings.run {
javaScriptEnabled = true
setAppCacheEnabled(true)
}
webViewClient = WebViewClient()
loadUrl("http://www.google.com")
}
}
}
2) Используйте новый метод внутри onBackPressed()
метода в своей деятельности.
Помните, что вы вызов этого метода при существующем экземпляре этого фрагмента , поэтому вы должны хранить его где-то:
override fun onBackPressed() {
if (homeFragment.webViewCanGoBack()) {
// If possible - go back in WebView
homeFragment.webViewGoBack()
} else {
// If NOT possible - just handle going back as always
super.onBackPressed()
}
}