Gestire lo stato di WebView

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 in seguito alle 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 dall'inizio del WebView fino alla posizione di scorrimento precedente.

WebView è in grado di gestire il proprio stato. Puoi sfruttare questa qualità gestendo il maggior numero possibile di modifiche alla configurazione per ridurre al minimo il numero di volte in cui viene ricreato un WebView. La tua app deve gestire le modifiche alla configurazione perché la ricreazione dell'attività (il modo in cui il sistema gestisce le modifiche alla configurazione) ricrea WebView, il che causa la perdita di stato di WebView.

Risultati

I componenti WebView dell'app mantengono il loro stato e la posizione di scorrimento in seguito a più modifiche alla configurazione, dal ridimensionamento alle modifiche dell'orientamento, fino all'apertura e alla chiusura del dispositivo.

Gestisci stato

Evita il più possibile la ricreazione dell'attività durante le modifiche alla configurazione e consenti l'invalidazione di WebView in modo che possa essere ridimensionato mantenendo il suo stato.

Per gestire lo stato di WebView:

  • Dichiarare le modifiche alla configurazione gestite dall'app
  • Invalidare lo stato WebView

1. Aggiungere modifiche alla configurazione al file AndroidManifest.xml dell'app

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 ogni volta che la tua app riceve una modifica 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 correttamente gli elementi Composable. Tuttavia, Compose ricrea spesso un WebView se non viene gestito correttamente.

Punti chiave

  • android:configChanges: attributo dell'elemento <activity> del file manifest. Elenca le modifiche alla configurazione gestite dall'attività.
  • View#invalidate(): metodo che causa il ridisegno di una visualizzazione. Ereditato da WebView.

Raccolte che contengono questa guida

Questa guida fa parte di queste raccolte selezionate di guide rapide che coprono obiettivi di sviluppo Android più ampi:

Consenti alla tua app di supportare un'esperienza utente ottimizzata su tablet, pieghevoli e dispositivi ChromeOS.

Hai domande o feedback

Visita la nostra pagina delle domande frequenti, consulta le guide rapide o contattaci per farci sapere cosa ne pensi.