2013-02-19 122 views
1

我的应用程序中有一个WebView,它显示从网页下载的HTML数据。为什么我要加载HTML而不是单独的URL?那么,为了让我能够进行离线搜索,我下载了HTML数据并将其存储在SQL数据库中。webView.canGoBack()在使用loadDataWithBaseURL()时不起作用

一切运作良好,并loadDataWithBaseUrl()工作后续调用好,并保持在正确加载在我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, ""); 

我读到这answer但我希望有更好的运气。

+0

你能尝试使用步法到位的GoBack和传球的是(1)每次PARAM? – lokoko 2013-02-19 04:47:51

+0

试试这个创建自己canGoBack像这样.... https://stackoverflow.com/a/48318991/7181583 – 2018-01-18 10:30:17

回答

4

所以我实际上决定实现我自己的“后退”功能,不知道这是否适合每个人的意图,但它对我有效。

首先,

创建ArrayList将存储在您按时间顺序访问的URL。

private ArrayList<String> searchHistory; 

onCreate()初始化:

searchHistory = new ArrayList<String>(); 

现在,每次加载一个网址,只需将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数据。

希望有帮助!

+0

你还保存HTML数据的网址吗? – 2014-09-01 05:34:12

1

另一种简单的解决方案是将保存所述第一URL和比检查是否等于当前的URL

字段:

String mFirstUrlLoaded = ""; 

比:

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

比:

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

先放在历史领域

view.loadDataWithBaseURL(mUrl, mHtmlData, SearchUtils.MIME_TYPE, SearchUtils.CHARSET, mUrl); 
0
String mFirstUrlLoaded = ""; 



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



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

这对我的作品的链接..

相关问题