2011-10-13 12 views

Respuesta

30

encontrado la respuesta en la documentación ...

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

Funciona, pero hay un error. Si estás en PageA, entonces vas a PageB. Ahora cuando presiona el botón Atrás, regresa correctamente a la página A. Pero ahora si presiona el botón Atrás otra vez, lo llevará de nuevo a PageB porque la página B era la página anterior. Entonces, recorrerá las dos páginas para siempre. –

+1

En cualquier caso, no estaba usando el historial para navegar a las páginas, por lo que no sería un problema en mi caso. Solo lo necesitaba para fines de registro. ¿Está utilizando la barra de desplazamiento hacia atrás para navegar? Si es así, ¿por qué? El navegador de Android se encargaría de eso por defecto, ¿no? –

+0

Tuve que implementar un navegador muy simple. Usé esto en su lugar: 'if (browser.canGoBack()) {browser.goBack()} else {finish()}' Esto funcionó bien para mí. –

0

Puede mantener una pila (lista) de las URL visitadas al agregarlas en la página Finalizada() y eliminarlas cuando el usuario haga una copia de seguridad.

es decir

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

y luego trampa de la llave en la actividad:

@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 tiende a ser llamada múltiple veces por página, especialmente si hay un nuevo trazado (por ejemplo, cursores parpadeantes) o iframes. También podría should OverrideUrlLoading, que solo recibe una nueva URL, pero que no se llama para iframes. Entonces, el mejor enfoque es usar una combinación de uso en PageFinished y shouldOverrideUrlLoading como se describe en http://stackoverflow.com/questions/3149216/how-to-listen-for-a-webview-finishing-loading-a-url-in -android – Torid

+0

Sí, cierto. Tendría que ver si la url ya estaba en la lista (en la posición cero) y no agregarla en ese caso. – tarrant

+0

Supongo que no me di cuenta, ** no ** quiero guardar las URL manualmente. La vista web mantiene una pila de historial, ¿verdad? Solo quiero obtener la última URL cargada. –

Cuestiones relacionadas