2011-10-13 13 views

答えて

30

を...

WebBackForwardList mWebBackForwardList = mWebView.copyBackForwardList(); 
String historyUrl = mWebBackForwardList.getItemAtIndex(mWebBackForwardList.getCurrentIndex()-1).getUrl(); 
+0

これは動作しますが、間違いがあります。あなたがPageAにいる場合は、PageBに行きます。戻るボタンを押すと、正しくpageAに戻ります。しかし、もう一度[戻る]ボタンを押すと、pageBは前のページだったので、PageBに再度移動します。したがって、2つのページの間が永遠にループします。 –

+1

いずれにしても、ページに移動するために履歴を使用していないため、私の場合は問題にはなりません。私は伐採の目的でそれを必要としました。 backForwardListを使用してナビゲートしていますか?もしそうなら、なぜですか? Androidのブラウザは、デフォルトでそれを世話するだろう、それはwouldnt? –

+0

私は非常に単純なブラウザを実装しなければなりませんでした。私は代わりにこれを使いました: 'if(browser.canGoBack()){browser.goBack()} else {finish()}'これは私のためにうまくいきました。 –

0

訪問したURLのスタック(リスト)は、onPageFinished()で追加してユーザーのバックアップ時に削除することで維持できます。

private List<String> urls = new ArrayList<String>(); 

     @Override 
    public final void onPageFinished(final WebView view,final String url) { 
        urls.add(0, url); 
     super.onPageFinished(view, url); 
    } 

、その後トラップ活動のバックキーすなわち

ドキュメントで答えを見つけ
@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    switch (keyCode) { 

    case KeyEvent.KEYCODE_BACK: 
        if (urls.size() == 1) { 
      finish(); 
      return true; 
     } else if (urls.size() > 1) { 
      urls.remove(0); 

      // load up the previous url 
      loadUrl(urls.get(0)); 

      return true; 
     } else 
          return false; 
    default: 
     return super.onKeyDown(keyCode, event); 
    } 
} 
+0

onPageFinishedが複数呼び出される傾向があります特に、再描画(例えば、カーソルの点滅)またはiframeがある場合は、1ページあたりの時間。 shouldOverrideUrlLoadingは、新しいURLに対してのみ呼び出されますが、iframeに対して呼び出されることはありません。ですから、最善の方法は、http://stackoverflow.com/questions/3149216/how-to-listen-for-a-webview-finishing-loading-a-url-inで説明されているように、onPageFinishedとshouldOverrideUrlLoadingの組み合わせを使用することです-android – Torid

+0

はい、本当です。 URLがすでにリスト(第0位)にあるかどうかを確認し、その場合は追加しないでください。 – tarrant

+0

私は自分自身を明確にしていないと思う、私は**手動でURLを保存する必要はありません**。 webviewは履歴スタックを維持していますか?私はちょうど最後に読み込まれたURLを取得したい。 –

関連する問題