Zarządzanie stanem komponentu WebView

Ikona oceny 3 gwiazdek

WebView to powszechnie używany komponent, który oferuje zaawansowany system zarządzania stanem. WebView musi zachowywać swój stan i pozycję przewijania po zmianach konfiguracji. WebView może utracić pozycję przewijania, gdy użytkownik obróci urządzenie lub rozłoży składany telefon. Wymusza to ponowne przewijanie od góry WebView do poprzedniej pozycji.

Sprawdzone metody

Zminimalizuj liczbę przypadków ponownego tworzenia WebView. WebView dobrze zarządza swoim stanem, a Ty możesz wykorzystać tę jakość, zarządzając jak największą liczbą zmian konfiguracji. Twoja aplikacja musi obsługiwać zmiany konfiguracji, ponieważ ponowne tworzenie Activity (sposób, w jaki system obsługuje zmiany konfiguracji) powoduje również ponowne tworzenie WebView, co powoduje utratę stanu WebView.

Składniki

  • android:configChanges: atrybut elementu <activity> w manifeście. Zawiera listę zmian konfiguracji obsługiwanych przez aktywność.
  • View#invalidate(): metoda, która powoduje ponowne narysowanie widoku. Dziedziczona przez WebView.

Kroki

Aby zapisać stan WebView, unikaj jak najczęściej ponownego tworzenia Activity, a następnie pozwól WebView na unieważnienie, aby można było zmienić jego rozmiar przy zachowaniu stanu.

1. Dodaj zmiany konfiguracji do pliku AndroidManifest.xml

Aby uniknąć ponownego tworzenia aktywności, określ zmiany konfiguracji obsługiwane przez aplikację (a nie przez system):

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

2. Unieważnij WebView po zmianach konfiguracji

Kotlin

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

Java

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

Ten krok dotyczy tylko systemu widoków, ponieważ Jetpack Compose nie musi niczego unieważniać, aby prawidłowo zmienić rozmiar Composable elementów. Jeśli jednak nie jest prawidłowo zarządzany, Compose często ponownie tworzy WebView. Aby zapisywać i przywracać stan WebView w aplikacjach Compose, użyj otoki Accompanist WebView.

Wyniki

Komponenty WebView w Twojej aplikacji zachowują teraz swój stan i pozycję przewijania po wielu zmianach konfiguracji, od zmiany rozmiaru po zmianę orientacji, składanie i rozkładanie.

Dodatkowe materiały

Więcej informacji o zmianach konfiguracji i sposobach zarządzania nimi znajdziesz w artykule Obsługa zmian konfiguracji.