android-webview - 在 WebView 中维护导航历史
问题描述
在我的应用程序中,我有主要活动和子活动。对主要活动的操作会打开一个子活动。每个子活动加载具有各种 url 都指向服务器位置的网页。我可以导航到所有的网址,但是当我按下返回时,我没有被重定向到上一页。相反,它存在并将我带到主要活动中。后退按钮操作应导航到最后一个 url 位置。怎么做?
解决方案
您需要将每个 url 添加到 List 对象,然后使用该对象导航回来。
private LinkedList<String> navigationHistory;
@Override
protected void onCreate(Bundle savedInstanceState) {
....
mWebView.setWebViewClient(new MyWebViewClient());
....
}
@Override
public void onBackPressed() {
if (navigationHistory.size() > 0) // Check if the url is empty
{
navigationHistory.removeLast(); // Remove the last url
if (navigationHistory.size() > 0) {
// Load the last page
mWebView.loadUrl(navigationHistory.getLast());
} else {
super.onBackPressed();
}
} else {
super.onBackPressed();
}
}
private class MyWebViewClient extends WebViewClient {
@Override
public void onPageFinished(WebView view, String url) {
if (!navigationHistory.contains(url)) // Check for duplicate urls
navigationHistory.add(url); // add each loading url to List
super.onPageFinished(view, url);
}
}
推荐阅读
- angular - 如何解决 Angular 中的 HTTPErrosResponse 问题
- android - 从其他 PC 编译时,Google Fit 应用程序无法正常工作
- sql - 如何在 Oracle 查询中从 XML 字段中选择值
- c++ - boost加月的行为原理是什么?
- selenium - Selenium 和非无头浏览器不断要求验证码
- asp.net-web-api - 哪个请求文化提供者是更好的选择
- android - 如何在 Material Bottom App Bar 中自定义视图?
- ios - 如何在 UIView 顶部设置阴影?
- .net-core - 引用 Microsoft.EntityFrameworkCore.dll 时,Assembly.LoadFrom 失败
- c# - 命名空间不能在 C# 控制台程序中包含方法错误