web-dev-qa-db-ja.com

WebView履歴をクリアする方法は?

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 ;
      }

ここにもヘルプページが表示されます...

29
vnshetty

以下のように、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
56
Osama_Almaani

clearHistory()back and forward listをクリアすると思います。そのため、現在ロードされているURLは引き続きバックリストに残ります。

9
abhinav

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");