2012-12-14 10 views
11

Nella mia app, ho uno FragmentActivity con più Fragment s tutti in modalità verticale ad eccezione di uno specifico Fragment. Mi muovo tra Fragment s attraverso il footer View s nello FragmentActivity.Dove verificare la modifica dell'orientamento in un frammento di Android

Ho un layout diverso (in realtà ha lo stesso nome ma widget diversi View s) per questo specifico Fragment quando c'è un cambiamento di orientamento. In modalità orizzontale, desidero rimuovere i widget specifici dal layout FragmentView e dal piè di pagina View dello FragmentActivity e quando si torna in verticale, aggiungere nuovamente tutto.

Ho salvato tutti i dati di cui ho bisogno in onSavedInstanceState() nel Fragment, ma dove è meglio che io possa provare per un cambio di orientamento in modo da poter ripristinare il View s in modo appropriato?

Non

sicuro di poter ignorare onConfigurationChange() e test di lì nel mio Fragment perché io non ho il Android: configChanges = "orientamento" nel mio Android Manifest.

risposta

22

Conservare questo controllo suCreate(). Quando si ruota il dispositivo, l'app viene riavviata. Quindi onCreate viene chiamato nuovamente al riavvio dell'app.

int currentOrientation = getResources().getConfiguration().orientation; 
if (currentOrientation == Configuration.ORIENTATION_LANDSCAPE) { 
    // Landscape 
} 
else { 
    // Portrait 
} 
+0

grazie. dammi altre idee su cosa provare. – irobotxxx

+4

è possibile creare xml separati per le viste verticale e orizzontale. crea una cartella denominata "layout-land" nella cartella "res" e crea un xml per la tua visualizzazione orizzontale in quella cartella. Mantieni i nomi di entrambi gli xml (verticale e orizzontale) uguali. Le tue visualizzazioni verranno regolate automaticamente. Assicurati di mantenere intatti tutti i widget di ogni xml (cambia semplicemente la visibilità dei widget che non hai bisogno in nessuna vista su "GONE"). –

+0

grazie mille. ma in realtà mi sono appena reso conto dal mio commento, intendevo che la tua risposta mi dava altre idee ... non intendevo davvero come una domanda, ma sono contento che sia successo, perché ho dimenticato di usare l'opzione Visualizza visibilità. :) – irobotxxx

7

È possibile controllare il cambiamento dell'orientamento sovrascrivendo onConfigurationChanged funzione del vostro frammento pure.

@Override 
    public void onConfigurationChanged(Configuration newConfig) { 

     super.onConfigurationChanged(newConfig); 
     int currentOrientation = getResources().getConfiguration().orientation; 

     if (currentOrientation == Configuration.ORIENTATION_LANDSCAPE){ 
      Log.v("TAG","Landscape !!!"); 
     } 
     else { 
      Log.v("TAG","Portrait !!!"); 
     } 
    } 
Problemi correlati