2013-02-19 38 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(); 
} 

這對我的作品的鏈接..

相關問題