2012-04-21 15 views
16

Tengo un tabhost con 3 pestañas. En cada una de estas pestañas hay una vista web. Cuando hago clic en una pestaña, la vista web debe "volver a cargar" incluso cuando he estado allí antes, no se ha guardado. ¿Hay alguna manera de guardar la vista web?Android webView saveState

Respuesta

34

Esto puede ser manejado por overrwriting onSaveInstanceState (Bundle Outstate) en su actividad y llamar saveState de la vista web:

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    webView.saveState(outState); 
} 

luego se recupera esto en su onCreate después de la vista web ha sido re-inflado por supuesto:

@Override 
public void onCreate(final Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.blah); 
    WebView webview = (WebView)findViewById(R.id.webview); 
    if (savedInstanceState != null) 
     webview.restoreState(savedInstanceState); 
    else 
     webview.loadUrl(URLData) 
} 

puede consultar este LINK

+0

El enlace está roto. –

1

alternativa, se puede ver en el uso de fragmentos con su tabHost. Al ingresar a otra webView, puede configurar el fragmento para ocultar y el otro para mostrar. cuando regrese al fragmento anterior, el contenido no habrá sido destruido. Así es como lo hice y funcionó para mí.

+0

Lo siento, sé que tu respuesta es hace mucho tiempo, pero creo que puedes ayudarme a guardar el estado de mi webView. Aquí está mi pregunta: http://stackoverflow.com/questions/26142255/retrieve-an-activity-after-time-out-warning-notification – Hamid

+0

Esto no está garantizado. Los fragmentos pueden destruirse si se detienen. – William

9

restoreState nunca fue confiable. Y en 2015, los documentos aceptan el hecho. (El cambio probablemente se hizo a los documentos alrededor de 2014). Esto es lo que dice ahora.

si se llama después de este WebView ha tenido la oportunidad de construir (páginas de carga, crear una copia/lista hacia adelante, etc.) del estado puede haber efectos secundarios indeseables. Tenga en cuenta que este método ya no restaura los datos de visualización para este WebView.

Y la entrada correspondiente para saveState() habla así:

Tenga en cuenta que este método ya no almacena los datos de visualización para esta vista Web.

Lo que realmente debe hacer dentro del método onCreate es llamar webView.loadUrl() si desea mostrar la última URL visitada, por favor ver este answer:

Si usted está preocupado por la vista web recargando sobre el cambio de orientación, etc.

puede configurar su actividad para manejar la orientación y cambios keyboardHidden, y luego simplemente dejar el WebView sola