Gestione dello stato di WebView

Icona di valutazione a tre stelle

WebView è un componente di uso comune che offre un sistema avanzato per la gestione dello stato. Un WebView deve mantenere il proprio stato e la posizione di scorrimento durante le modifiche alla configurazione. Un WebView può perdere la posizione di scorrimento quando l'utente ruota il dispositivo o apre uno smartphone pieghevole, il che lo costringe a scorrere di nuovo dalla parte superiore di WebView alla posizione di scorrimento precedente.

Best practice

Riduci al minimo il numero di volte in cui viene ricreato un WebView. WebView è in grado di gestire il proprio stato e puoi sfruttare questa qualità gestendo il maggior numero possibile di modifiche alla configurazione. La tua app deve gestire le modifiche alla configurazione perché la ricreazione di Activity (il modo in cui il sistema gestisce le modifiche alla configurazione) ricrea anche WebView, il che fa sì che WebView perda il suo stato.

Ingredienti

  • android:configChanges: attributo dell'elemento <activity> del manifest. Elenca le modifiche alla configurazione gestite dall'attività.
  • View#invalidate(): metodo che fa sì che una visualizzazione venga ridisegnata. Ereditato da WebView.

Passaggi

Per salvare lo stato di WebView, evita il più possibile la ricreazione di Activity, quindi lascia che WebView invalidi in modo che possa ridimensionarsi mantenendo il suo stato.

1. Aggiungi le modifiche alla configurazione a AndroidManifest.xml

Evita la ricreazione dell'attività specificando le modifiche alla configurazione gestite dalla tua app (anziché dal sistema):

<activity
  android:name=".MyActivity"
  android:configChanges="screenLayout|orientation|screenSize
      |keyboard|keyboardHidden|smallestScreenSize" />

2. Invalida WebView in caso di modifiche alla configurazione

Kotlin

override fun onConfigurationChanged(newConfig: Configuration) {
    super.onConfigurationChanged(newConfig)
    webView.invalidate()
}

Java

@Override
public void onConfigurationChanged(@NonNull Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    webview.invalidate();
}

Questo passaggio si applica solo al sistema di visualizzazione, poiché Jetpack Compose non deve invalidare nulla per ridimensionare Composable elementi correttamente. Tuttavia, Compose ricrea spesso un WebView se non viene gestito correttamente. Utilizza il wrapper Accompanist WebView per salvare e ripristinare lo stato WebView nelle app Compose.

Risultati

I componenti WebView della tua app ora mantengono il loro stato e la posizione di scorrimento durante le modifiche alla configurazione, dal ridimensionamento al cambio di orientamento, fino all'apertura e alla chiusura.

Risorse aggiuntive

Per saperne di più sulle modifiche alla configurazione e su come gestirle, consulta Gestire le modifiche alla configurazione.