WebViewの履歴がクリアされていません...以下のコードの何が問題になっていますか?
Webビューの作成
mWebViewReport=(WebView)findViewById(R.id.report_page);
mWebViewReport.setWebViewClient(new HelloWebViewClient());
mWebViewReport.getSettings().setBuiltInZoomControls(true);
ヘルプボタンがクリックされたときにヘルプファイルを読み込む
mWebViewReport.loadUrl("file:///Android_asset/help.html");
mWebViewReport.clearHistory();
mWebViewReport.clearCache(true);
概要ボタンをクリックしたときに概要ファイルを読み込む
mWebViewReport.loadUrl("file:///Android_asset/summary.html");
//On back button click
if (mWebViewReport.canGoBack()) {
mWebViewReport.goBack();
return ;
}
ここにもヘルプページが表示されます...
以下のように、PageFinishedリスナーの履歴設定をクリアするために、webviewがページ(url)をロードしている間は履歴をクリアできません。
onCreateの前にパブリック変数を宣言します
boolean clearHistory = false;
mWebViewReportを宣言すると、これが設定されます
mWebViewReport.setWebViewClient(new WebViewClient(){
@Override
public void onPageFinished(WebView view, String url)
{
if (clearHistory)
{
clearHistory = false;
mWebViewReport.clearHistory();
}
super.onPageFinished(view, url);
}
});
履歴をクリアすることを目的としたヘルプURLを呼び出すときは、clearHistoryをtrueに設定するだけです。
mWebViewReport.loadUrl("file:///Android_asset/help.html");
mWebViewReport.clearHistory(); // REMOVE THIS LINE
mWebViewReport.clearCache(true); // REMOVE THIS LINE
clearHistory = true; // ADD THIS LINE
clearHistory()
はback and forward list
をクリアすると思います。そのため、現在ロードされているURLは引き続きバックリストに残ります。
Osama_Almaaniのソリューションは非常にうまく機能します。フラグをWebViewClient実装に移動することにより、コードを最適化できます。
アクティビティにフィールドを定義し、匿名宣言の代わりにこれを使用します。
private MyWebViewClient myWebViewClient = new MyWebViewClient();
...
myWebView.setWebViewClient(myWebViewClient);
新しいメソッドclearHistory()でWebViewClientクラスを拡張します。
private class MyWebViewClient extends WebViewClient {
private boolean clearHistory = false;
/**Use this instead of WebView.clearHistory(). */
public void clearHistory(){
clearHistory = true;
}
@Override
public void onPageFinished(WebView view, String url) {
if(clearHistory){
Log.d(TAG, "clearHistory now");
clearHistory = false;
myWebView.clearHistory();
}
super.onPageFinished(view, url);
}
}
これで、この新しいメソッドを使用できます。
myWebViewClient.clearHistory();
mWebViewReport.loadUrl("file:///Android_asset/help.html");