2013-04-24 12 views
7

Sto sviluppando l'app, dove ho bisogno di visualizzare i suggerimenti in ListView e quando l'orientamento è cambiato voglio che quell'elenco sia nascosto. Ma appare comunque sullo schermo. Ho provato questo: 1) Ottieni l'adattatore della lista e cancellalo. 2) Imposta la visibilità GONE prima che l'orientamento sia cambiato (ma diventa visibile dopo onCreate) 3) Imposta la visibilità GONE in onCreate, ma l'elenco appare ancora sullo schermo (penso che forse Android salvi la vecchia lista, perché inizializzo la vista elenco di nuovo e sembra vuoto, ma la lista sullo schermo non lo è). Quindi, come posso sbarazzarmi della lista?Come NON salvare lo stato di visualizzazione in Android?

+3

un'occhiata a [ 'View.setSaveEnabled (enab booleano led) '] (http://developer.android.com/reference/android/view/View.html#setSaveEnabled (booleano)) metodo –

risposta

13

Invece di usare qualcosa di globale come Android: configChanges che riguardano tutti i punti di vista in attività, cosa sull'utilizzo del metodo setSaveEnabled (booleano) o sull'attributo xml equivalente android: saveEnabled?

Controlla se il salvataggio dello stato di questa vista è abilitato (ovvero se verrà chiamato il suo metodo onSaveInstanceState()).

Se lo si imposta su falso dovrebbe sempre tornare allo stato predefinito quando si cambia orientamento perché il suo stato non verrà salvato.

Si potrebbe, ad esempio, mettere questo nel file di layout:

<ListView 
    .... 
    android:visibility="invisible" 
    android:saveEnabled="false"> 
</ListView> 

e quindi impostare la visibilità visibile quando si inizia a digitare. Oppure, se preferisci, imposta la visibilità e il metodo setSaveEnabled nel metodo onCreate.

Ho provato con un semplice ListView e un pulsante che cambia la visibilità a true. Sulla rotazione ListView divenne invisibile (stato predefinito)

noti inoltre che:

Questo flag può disattivare solo il risparmio di questa vista; qualsiasi vista secondaria può ancora avere il proprio stato salvato.

così si dovrebbe avere per cancellare l'elenco durante onStop() o qualsiasi metodo che si desidera, ma se anche se non lo fai, il ListView sarà ancora invisibile sulla rotazione

Fonte:

1
@Override 
protected void onSaveInstanceState(Bundle outState) { 
} 

ignorare questa funzione nella propria attività e non chiamare il metodo "super"!

o specificare l'orientamento nel manifesto:

<activity 
    android:name="com.blabla" 
    android:configChanges="keyboardHidden|orientation|screenSize" 
    android:screenOrientation="portrait" > 
</activity> 
1

sistema Android chiama il suo metodo di vostra actiivty sul cambiamento dell'orientamento del dispositivo onCreate(). Aggiungere configchanges alla tua voce di attività nel manifestare se non si desidera creare la vostra attività di nuovo sul cambiamento dell'orientamento

<activity 
     android:name=".MyActivity" 
     android:configChanges="keyboardHidden|orientation" 
     /> 
Problemi correlati