如果有人仍在寻找它,我希望这个答案。我一直在寻找解决我项目中的类似问题并尝试了多种方法,例如使用 - WebView.HitTestResult - 将网址推送到列表中 - onKeyDown 等等......我如果您的应用程序仅包含 webview,则认为其中大部分都可以工作。但是我的项目结合了本机和 webview 并处理了一些本机模式。
本质上发现,关键是你如何重写shouldOverrideUrlLoading方法。因为我希望我的应用程序处理一些 url,而 webview 来处理其他一些,尤其是后处理。我使用了一个标志来进行后按,比如 ..
@Override
public void onBackPressed() {
if (mWebView.canGoBack()) {
mClient.setIsBackPressed(true);
//mClient is an instance of the MyWebviewClient
mWebView.goBack();
} else {
super.onBackPressed();
}
}
public class MyWebviewClient extends WebViewClient {
private Boolean isBackPressed = false;
public void setIsBackPressed(Boolean isBackPressed) {
this.isBackPressed = isBackPressed;
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (isBackPressed){
return false;
}
else {
// handle the url by implementing your logic
return true;
}
}
@Override
public void onPageFinished(WebView view, String url) {
isBackPressed = false;
super.onPageFinished(view, url);
}
}
这样,当您单击返回时,只要有重定向,它就会返回 false 并因此模拟 webview 的行为。同时,确保在页面加载完成后将 isBackPressed 设置为 false。希望这可以帮助 !!