2012-12-11 9 views
11

I eine Aktivität mit Aktionsleiste tab. Jede Registerkarte enthält ein Fragment. Jetzt, wenn ich mein Gerät rotiere, kommt das Bündel in meinem entsprechenden Fragment als null. Dies ist vorsichtig, wenn ich Geräte-Post-android 3.2 verwende, aber es passiert, wenn das Gerät Andoird3.0 ist. Ich habe Kopfschmerzen, nachdem ich an diesem Thema gearbeitet habe. Ich überprüfte verschiedene Links auf SO, aber keine Hilfe. Obwohl ich genug Details gegeben habe, werde ich immer noch ein Code-Snippet bereitstellen, da der Benutzer bei verschiedenen Fällen nach einem Code-Snippet fragt.Fragment saveInstanceState kommt als null nach der Orientierungsänderung

In meinem Fragment Klasse ich diesen Wert zu speichern

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

diese eine boolean Variable zu speichern, die es, wie unten retrived.

/** 
* 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 
     }     
    } 
} 

aber nach der Drehung savedInstanceState kommt als null. Ich mache nicht was falsch läuft. Ich habe in einem Dokument gelesen, dass unter 3.2 das onCreateView() von Fragment nicht mit Bundle-Wert aufgerufen wird. Aber damit umzugehen. Jede Hilfe wird geschätzt.

+0

Sind Sie mit android: configChanges ?? – Faizan

+0

Haben Sie auch versucht, setRetainInstance (true); ???? – Faizan

+0

Grundsätzlich verwende ich zwei verschiedene Layout für Querformat und Hochformat. Also kann nicht Android: ConfigChange. Und setRetainInstance (true), ich habe nicht im aktuellen Szenario verwendet, aber ich habe es früher verwendet, es hat nicht funktioniert. Noch einen Versuch in aktuellem Szenario gibt auch – random4Infinity

Antwort

3

Versuchen Sie, die savedInstanceState in onCreate der Fragment zu bekommen. Wie

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

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

Bitte versuchen Sie es ... Ich hoffe, es

+0

Vielen Dank für Antwort und Ja Faizan Ich habe gleiche Art und Weise, aber immer noch savedInstance kommt als null. Ich hatte hinzugefügt, die bereits den Kommentar für gleiche – random4Infinity

+1

Sie haben versucht, in onCreate statt onActivityCreated ??? Richtig? – Faizan

+0

ich versucht habe, in 'setRetainInstance (true);' auf onCreat() und 'if (savedInstanceState! = null) {}' in onActivityCreated() – random4Infinity

4

arbeiten, wenn Sie setRetainInstance (true) das savedInstance Bündel verwenden wird immer Gonna null nach Ausrichtung geändert. SO kann man nicht wirklich etwas damit retten, aber was Sie tun können, wenn Sie etwas sparen müssen, ist es in einem Datenelement des Fragments zu setzen, weil setRetainInstance (true) das Fragment bewahrt und sie nicht zerstören, so dass nach Das Gerät wurde gedreht du wirst die gleichen Werte haben.

+0

Dank für Poiting. –

+0

Super, das hat mir wirklich geholfen! Habe einfach eine Instanzvariable vom Typ Bundle benutzt und es hat funktioniert! – user2426316

Verwandte Themen