2012-12-11 16 views
11

Mam aktywność z zakładką paska akcji. Każda karta zawiera fragment. Teraz, gdy obracam moje urządzenie, pakunek w moim odpowiednim fragmencie nadchodzi jako zerowy. Jest to uważane, gdy korzystam z urządzenia post android 3.2, ale dzieje się, gdy urządzenie jest Andoird3.0. Po pracy nad tym problemem odczuwam ból głowy. Sprawdziłem różne linki na SO, ale bez pomocy. Mimo że podałem wystarczająco dużo szczegółów, nadal będę podawał fragment kodu, ponieważ w różnych przypadkach użytkownik prosi o fragment kodu.Fragment saveInstanceState ma wartość NULL po zmianie orientacji

W mojej klasie mam przechowywania fragmentu tej wartości

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

ten jest przechowywanie jedną logiczną zmienną której retrived jak poniżej.

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

ale po obróceniu savedInstanceState nadchodzi za nieważną. Nie rozumiem, co się dzieje. W pewnym dokumencie przeczytałem, że poniżej fragment onCreateView() z nie jest wywoływany z wartością pakietu. Ale żeby sobie z tym poradzić. Każda pomoc zostanie doceniona.

+0

Czy używasz Androida: configChanges? – Faizan

+0

Również, Czy próbowałeś setRetainInstance (true); ???? – Faizan

+0

Zasadniczo używam dwóch różnych układów dla trybu krajobrazu i portretu. Więc nie można użyć android: configChange. I setRetainInstance (true), i ahve nie używane w bieżącym scenariuszu, ale użyłem go wcześniej, to nie działa. Nadal spróbuję w obecnym scenariuszu także – random4Infinity

Odpowiedz

3

Spróbuj uzyskać savedInstanceState w onCreate z Fragment. Jak

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

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

Spróbuj ... mam nadzieję, że to będzie działać

+0

Dzięki za odpowiedź i tak Faizan zrobiłem tak samo, ale nadal savedInstance nadchodzi za nieważną. Ja już dodał komentarz dla samego – random4Infinity

+1

Próbowano w onCreate zamiast onActivityCreated ??? prawidłowe? – Faizan

+0

próbowałem w 'setRetainInstance (true);' na onCreat() i 'if (savedInstanceState! = null) {}' w onActivityCreated() – random4Infinity

4

jeśli używasz setRetainInstance (true) wiązka savedInstance zawsze będzie zerowy po orientacja zmieniło. W związku z tym nie można go naprawdę zapisać, ale to, co można zrobić, jeśli trzeba coś zapisać, to wstawić do elementu danych fragmentu, ponieważ setRetainInstance (true) zachowuje ten fragment i nie niszczy go, więc po urządzenie zostało obrócone, będziesz miał te same wartości.

+0

Dzięki za poiting. to. –

+0

Awesome, to naprawdę pomogło mi! Wystarczy stosować instancję zmiennej typu Bundle i to działa! – user2426316

Powiązane problemy