Android WebView返回上一层界面时,停留在第一层无法退出当前Activity,一直在刷新当前界面
WebView详细解析:
https://www.jianshu.com/p/b8526e6b7760
解决方法:
boolean canGoBack():用来确认WebView里是否还有可回退的历史记录。通常我们会在WebView里重写返回键的点击事件,通过该方法判断WebView里是否还有历史记录,若有则返回上一页。
@Override
override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
if (interesWeb.canGoBack()) {
interesWeb.goBack();
return true;
}else {
finish();
}
return super.onKeyDown(keyCode, event);
}
此方法可以实现逐级返回上层webview界面,但是如果WebView的第一个界面只有在首次进入时显示的话,就会造成后续返回时,一直停留在当前界面无法退出这个Activity界面(我的使用场景如此)
onKeyDown方法还会造成一个问题,就是在webview界面的时候,如果当前这个界面需要播放音频,你通过音量键调节音量的时候,会导致界面后退。
替换方案:
override fun onBackPressed() {
if (interesWeb.canGoBackOrForward(-2)) {
interesWeb.goBack();
}else {
finish();
}
}
可以通过onBackPressed()来替代onKeyDown方法。canGoBackOrForward()替换canGoBack()方法。
boolean canGoBackOrForward(int steps):以当前的页面为起始点,用来确认WebView的历史记录是否足以后退或前进给定的步数,正数为前进,负数为后退。(详细解释可以看上面的链接:https://www.jianshu.com/p/b8526e6b7760)
同时,在使用原生的webView进行页面加载时,需要注意相关属性的配置。
参考: