3

我的应用程序中有一个WebView显示从网页下载的 HTML 数据。为什么我要加载 HTML 而不是单独加载 URL?好吧,为了让我允许离线搜索,我下载了 HTML 数据并将其存储在 SQL 数据库中。

一切运行良好,后续调用运行loadDataWithBaseUrl()良好,并继续在 my 上正确加载WebView,但每当用户按下后退键时,用户只是被带回堆栈上的最后一个活动,而不是返回。

我尝试使用以下代码:

// Check if the key event was the Back button and if there's history
if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack()) {
    myWebView.goBack();
    return true;
}

但是后来我尝试通过以下方式强制WebView返回,而不检查它是否可以:

// Check if the key event was the Back button and if there's history
if ((keyCode == KeyEvent.KEYCODE_BACK)) {
    myWebView.goBack();
    return true;
}

但什么也没发生,它只是停留在同一个地方。

作为一个仅供参考,我已经尝试null在调用时传递一个实际的 URL loadData(),这就是我现在设置它的方式:

view.loadDataWithBaseURL(mUrl, mHtmlData, SearchUtils.MIME_TYPE, SearchUtils.CHARSET, "");

我读了这个答案,但我希望好运。

4

4 回答 4

5

所以我实际上决定实现我自己的“返回”功能,不确定这是否适合每个人的意图,但它对我有用。

第一的,

创建一个ArrayList将按时间顺序存储您访问的 url。

private ArrayList<String> searchHistory;

onCreate()初始化它:

searchHistory = new ArrayList<String>();

现在,每次加载 url 时,只需将 url 字符串添加到历史记录中:

String mUrl = "www.example.com";
searchHistory.add(mUrl);
mWebView.loadDataWithBaseURL(mUrl,...);

并且,当用户按下后,通过删除数组的最旧条目来处理它,然后加载删除后剩余的最后一个:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {     
    if ((keyCode == KeyEvent.KEYCODE_BACK) && searchHistoryPos > 0) {
        Constants.LogMessage("Handling back keyevent");
        //remove eldest entry
        searchHistory.remove(mUrl);
        //make the url-to-load be the latest entry after deletion
        mUrl = searchHistory.get(searchHistory.size);
        //load the new url
        mWebView.loadDataWithBaseURL(mUrl...);
        }
    }

当然,在调用 loadDataWithBaseUrl 时,我也是在传递预加载的 HTML 数据。

希望有帮助!

于 2013-02-25T18:43:27.500 回答
1

另一个简单的解决方案是保存第一个 url,然后检查是否等于当前 url

场地 :

String mFirstUrlLoaded = "";

比 :

mFirstUrlLoaded = "your first url.....";

比 :

@Override
public void onBackPressed() {
        if (!mFirstUrlLoaded.equals(mWebView.getUrl())) { 
        mWebView.goBack();
}
于 2014-04-09T13:23:10.897 回答
1

将第一个链接放在历史字段上

view.loadDataWithBaseURL(mUrl, mHtmlData, SearchUtils.MIME_TYPE, SearchUtils.CHARSET, mUrl);
于 2014-11-17T21:46:26.000 回答
0
String mFirstUrlLoaded = "";



mFirstUrlLoaded = "your first url.....";



@Override
public void onBackPressed() {
        if (!mFirstUrlLoaded.equals(mWebView.getUrl())) { 
        mWebView.goBack();
}

这对我有用..

于 2015-12-03T18:51:10.810 回答