2013-06-11 16 views
5

ho fatto un lettore multimediale in Android che sta funzionando grande, ma quando cambio l'orientamento dello schermo, l'attività viene riavviato so che la questione è stata già chiesto su StackOverflow più volte ma nessuna delle risposte mi ha aiutato. Penso che dovrei usare: onRetainNonConfigurationInstancecome implementare onRetainNonConfigurationInstance

@Override 
public Object onRetainNonConfigurationInstance() { ... } 

ma non sapevo il modo corretto per la sua attuazione quindi se qualcuno mi potrebbe dare un tutorial o un esempio implicita sarei grato

risposta

5

credo che onRetainNonConfigurationInstance() è deprecato. Ti dirà di usare invece Fragments. Here è un collegamento alla documentazione Fragment. Fondamentalmente, inserirai la tua interfaccia utente e i dati in una Fragment personalizzata, quindi utilizzerai lo FragmentManager per memorizzare un'istanza del tuo Fragment. Quindi, al riavvio dell'attività, è possibile recuperare il numero Fragment e riposizionarlo secondo necessità.

+1

Attualmente sto usando un filo separato per alcune cose, posso immaginare che i frammenti non farà il trucco c'è. –

3

Non importa che sia deprecato, funziona bene. Semplice sarebbe:

public Object onRetainNonConfigurationInstance() { 
    return this; 
} 

Poi nel YourActivity s' onCreate()

public void onCreate(Bundle savedState) 
{ 
    YourActivity prevActivity = (YourActivity)getLastNonConfigurationInstance(); 
    if(prevActivity!= null) { 
     // So the orientation did change 
     // Restore some field for example 
     this.myValue = prevActivity.myValue; 
    } 
} 
+0

mi dispiace, potrebbe essere una domanda stupida, ma dovrei mettere tutti gli attributi che voglio salvare su onRetainNonConfigurationInstance() ?????? – AndroidM

+0

dovrei aggiungere qualcosa al file manifest ?? – AndroidM

+0

Sì, tutto ciò che si desidera salvare in una forma di un singolo oggetto. Quindi, quando si restituisce l'intera attività si ottiene tutto indietro ma forse è troppo forse è necessario solo un campo o due in modo da poter restituire il proprio oggetto MyState. No, non sono necessari cambiamenti evidenti. –

0

Chiamato dal sistema, come parte di destroying un activity a causa di una modifica della configurazione , quando è noto che una nuova istanza verrà immediatamente creata per la nuova configurazione. Puoi restituire qualsiasi oggetto che ti piace qui, inclusa l'istanza dell'attività stessa, che può essere recuperata in seguito chiamando lo getLastNonConfigurationInstance() nella nuova istanza di attività. Se hai come target HONEYCOMB o successivo, considera invece l'utilizzo di Fragment con Fragment.setRetainInstance(boolean).

Mantenere tre cose in mente quando si utilizza onRetainNonConfigurationInstance(),

  • La funzione sarà chiamato tra onStop() e OnDestroy().
  • Una nuova istanza dell'attività verrà sempre creata immediatamente dopo che viene chiamato onDestroy(). In particolare, nessun messaggio verrà inviato durante questo periodo (quando l'oggetto restituito non ha un'attività da associare a ).
  • L'oggetto che si restituisce qui sarà sempre disponibile dal metodo getLastNonConfigurationInstance() della seguente attività istanza come descritto qui.
  • quando si utilizza AppCompatActivity non è possibile utilizzare onRetainNonConfigurationInstance(), invece non c'è alternativa onRetainCustomNonConfigurationInstance()