2012-06-07 22 views

risposta

10

Evidenziando il commento @kirgy, è necessario aggiungere orientation|screenSize al manifest se la propria API> 3.2 non funzionerà senza di esso in alcuni casi.

+3

No, no, no. Si prega di consentire la configurazione di aggiornare quando dovrebbe. –

+0

@NightlyNexus quali possono essere le implicazioni di ciò all'interno di una visualizzazione Web? –

+0

@cgomezmendez Consenti sempre alle tue Views di ripristinare il loro stato. Sì, in questo caso, una WebView non ha lo stato da salvare e ripristinare, ma la WebView è l'unica parte dello stato di istanza della tua attività? Quasi certamente no. –

47

C'è più di un approccio per affrontare questo problema.

La via facile è aggiungere android:configChanges="orientation|screenSize" al relativo Activity nel file manifest. Impostando questo flag, dici a Android di non distruggere lo Activity e di gestire tutte le modifiche di orientamento (se presenti).

L'approccio più moderno sarebbe quello di mettere il WebView all'interno di un Fragment e farlo mantenere la sua istanza, utilizzando il flag setRetainInstance(true). L'hosting Activity verrà comunque distrutto durante le modifiche di orientamento, ma lo Fragment contenente lo WebView verrà semplicemente rimosso e riattaccato, senza la necessità di ricreare se stesso. Puoi trovare an example di questa funzione nelle demo dell'API. Tieni presente che la libreria di supporto offre un'implementazione di frammenti compatibile con pre-Honeycomb, quindi non lasciarti ingannare dal livello API della classe "regolare" Fragment.

+2

Il tuo primo modo "più semplice" per farlo è l'unico modo. L '"approccio più moderno" non funzionerà in questo caso (beh, funzionerà, ma creerà memoria) perché una WebView è legata al contesto di un'attività al momento dell'istanziazione. Controlla [i commenti di Dianne Hackborn su questo] (https://groups.google.com/forum/#!msg/android-developers/cWnxkQ8RLeY/RA1n77EDeR8J). – mkuech

+0

@mkuech: Quest'ultimo è il caso di qualsiasi visualizzazione, non solo di 'WebView's - ecco perché ti troverai sempre rigonfiantare le viste a livello di frammento in' onCreateView() 'o' onActivityCreated() '. Nella mia risposta precedente non sono entrato in dettagli specifici, ma con 'setRetainInstance (true)' puoi rendere il 'vecchio' 'WebView' salvare il suo stato in un bundle e ripristinarlo in seguito. Significa che 'WebView' dovrà ricostruire il suo contenuto (leggi: ricaricare l'url), quindi visivamente non è così veloce/fluido come gestire manualmente le modifiche alla configurazione di Activity. –

+2

Ma non è necessario usare un 'frammento' per salvare lo stato di' WebView'. Puoi semplicemente utilizzare i metodi di gestione dello stato standard da 'Activity' o' Fragment' se è tutto ciò che ti serve. 'setRetainInstance (true)' non è _normalmente_ necessario per questo semplice caso d'uso. Più semplicemente sostituisce 'onRetainNonConfigurationInstance', ed è utile per cose come mantenere un' Thread' attivo tra le modifiche alla configurazione. Eviterei di complicare le cose. Inoltre, poiché il semplice salvataggio di uno stato di 'WebView' non lo mancherà dal ridisegnare/ricaricare, la prima soluzione è l'unico vero modo per mantenerlo senza problemi durante la rotazione. – mkuech

5

Aggiungi android:configChanges="orientation" al file manifest per impedire il riavvio quando l'orientamento dello schermo cambia.

come ::

<activity android:name=".MyActivity"  
    android:configChanges="orientation" 
    android:label="@string/app_name"> 

Vedi this per alcuni riferimenti.

+0

Caro Abhina8, grazie mille ..è davvero eccezionale ... ho provato che funziona molto bene per me :) – SopheakVirak

+0

@SopheakVirak felice di aiutarti. – Eight

+6

Una nota per Android 3.2+ (API 13) - da questa versione in poi una rotazione dello schermo causa anche una modifica della dimensione dello schermo che aggiornerà l'interfaccia utente. Devi dichiarare "orientation | screenSize" invece di "orientamento". Questo è tutto nell'articolo Android sopra suggerito da @MH. http://developer.android.com/guide/topics/resources/runtime-changes.html#HandlingTheChange – kirgy

Problemi correlati