2012-12-11 17 views
11

Ho un'attività con la scheda della barra delle azioni. Ogni scheda contiene un frammento. Ora quando ruoto il mio dispositivo, il bundle nel mio frammento corrispondente sta diventando nulla. Questo è curato quando utilizzo il dispositivo Android 3.2, ma succede quando il dispositivo è Android 3.0. Sto avendo un mal di testa dopo aver lavorato su questo problema. Ho attraversato il controllo di vari link su SO, ma nessun aiuto. Sebbene abbia fornito abbastanza dettagli, fornirò ancora alcuni snippet di codice in quanto in vari casi l'utente richiede il frammento di codice.Il frammento saveInstanceState viene considerato nullo dopo il cambio di orientamento

Nella mia classe frammento sto memorizzazione di questo valore

@Override 
    public void onSaveInstanceState(Bundle outState) 
    { 
     super.onSaveInstanceState(outState); 
     outState.putBoolean("textboxVisible", true); 
    } 

questo sta memorizzando una variabile booleana cui retrived come di seguito.

/** 
* Function called after activity is created. Use this 
* method to restore the previous state of the fragment 
*/ 
    @Override 
public void onActivityCreated(Bundle savedInstanceState) 
{ 
    super.onActivityCreated(savedInstanceState); 
    if (savedInstanceState != null) 
    { 
     //restore the state of the text box 
     boolean textboxVisible = savedInstanceState.getBoolean("textboxVisible"); 
     if (textboxVisible) 
     { 
      //do some stuff 
     }     
    } 
} 

ma dopo la rotazione savedInstanceState sta venendo nullo. Non so cosa stia sbagliando. Ho letto in alcuni documenti che al di sotto del 3.2 il onCreateView() del frammento non viene chiamato con il valore del bundle. Ma per affrontare questo. Qualsiasi aiuto sarà apprezzato.

+0

Stai usando Android: configChanges ?? – Faizan

+0

Inoltre, hai provato setRetainInstance (true); ???? – Faizan

+0

Fondamentalmente sto usando due layout diversi per la modalità orizzontale e verticale. Quindi non è possibile utilizzare Android: configChange. E setRetainInstance (true), non ho usato lo scenario corrente ma l'ho usato prima, non funzionava. Ancora proverai nello scenario attuale anche – random4Infinity

risposta

3

Provare a ottenere il savedInstanceState in onCreate del Fragment. Come

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setRetainInstance(true); 

     if (savedInstanceState != null) { 
      // IT MUST NOT BE NULL HERE 
     } 
    } 

Si prega di provare ... spero che funzionerà

+0

Grazie per la risposta e Sì Faizan ho fatto lo stesso, ma ancora salvatoInstance sta arrivando come nullo.Avevo già aggiunto il commento per lo stesso – random4Infinity

+1

Hai provato su onCreate invece di onActivityCreated ??? Corretto? – Faizan

+0

Ho provato in 'setRetainInstance (true);' on onCreat() e 'if (savedInstanceState! = null) {}' in onActivityCreated() – random4Infinity

4

se si utilizza setRetainInstance (vero) il fascio savedInstance è sempre andando essere nullo dopo l'orientamento è cambiato. Quindi non puoi davvero salvare qualcosa con esso, ma ciò che puoi fare se devi salvare qualcosa, è metterlo in un membro dati del frammento, perché setRetainInstance (true) conserva il frammento e non lo distrugge, quindi dopo il dispositivo è stato ruotato avrai gli stessi valori.

+0

Grazie per il poiting –

+0

Impressionante, mi ha davvero aiutato! Ho appena usato una variabile di istanza di tipo Bundle e ha funzionato! – user2426316

Problemi correlati