2012-04-21 17 views
16

Ho un tabhost con 3 schede. In ognuna di queste schede c'è una visione web. Quando faccio clic su una scheda, la visualizzazione Web deve "ricaricare" anche se ci sono già stato, non è stata salvata. C'è un modo per salvare la visualizzazione Web?WebView Android saveState

risposta

34

Questo può essere gestito da overrwriting onSaveInstanceState (Bundle Outstate) nella vostra attività e chiamando saveState dalla WebView:

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

poi recuperare questo nella vostra onCreate dopo la WebView è stato ri-gonfiato naturalmente:

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

è possibile fare riferimento questo LINK

+0

Il collegamento è rotto. –

1

in alternativa si può considerare di usare frammenti con la tabHost. quando si entra in un'altra WebView è possibile impostare il frammento da nascondere e l'altro da mostrare. quando ritorni al frammento precedente il contenuto non sarà stato distrutto. Ecco come ho fatto e ha funzionato per me.

+0

Scusa, so che la tua risposta è per molto tempo fa, ma penso che potresti aiutarmi a salvare lo stato della mia webView. Ecco la mia domanda: http://stackoverflow.com/questions/26142255/retrieve-an-activity-after-time-out-warning-notification – Hamid

+0

Questo non è garantito. I frammenti possono essere distrutti se vengono fermati. – William

9

restoreState non è mai stato affidabile. E vieni 2015 i documenti accettano il fatto. (Il cambiamento è stato probabilmente apportato ai documenti intorno al 2014). Questo è quello che dice ora.

Se è chiamato dopo questo WebView ha avuto la possibilità di costruire statali (pagine di carico, creare un back/forward lista, ecc) ci possono essere effetti collaterali indesiderati. Si noti che questo metodo non è più ripristina i dati di visualizzazione per questo WebView.

E la voce corrispondente per saveState() parla così:

Si prega di notare che questo metodo non memorizza i dati di visualizzazione per questo WebView.

Cosa si dovrebbe fare all'interno del metodo onCreate è chiamare webView.loadUrl() se si desidera visualizzare l'ultimo URL visitato, consulta questo answer:

Se siete preoccupati per la WebView ricaricando sul cambiamento di orientamento ecc

è possibile impostare l'attività per gestire l'orientamento e cambiamenti keyboardHidden, e poi basta lasciare il WebView sola