2013-10-18 6 views
7

In einer Anwendung einstellen, wenn ein Fragment Fokus verliert (d.h. eine andere Aktivität/Fragment wird über sie geöffnet ist), ist es onSaveInstanceState() aufgerufen.Bundle in onActivityCreated() gibt null, auch nach Werten in onSaveInstanceState()

Gleiches wird in developers guide erwähnt.

Ich versuche diesen Ansatz zu verwenden, um den Zustand meines Fragments zu erhalten, wann immer es fortgesetzt wird. Meine Absicht war, diese bundle in onActivityCreated() zu nennen, wenn das Fragment wieder aufgenommen wird.

Obwohl onSaveInstanceState aufgerufen wird, bevor Fragment Fokus verlieren. Aber wenn onActivityCreated() aufgerufen wird, erhält es die Bundle savedInstanceState als Null.

Wie kann ich die Daten aus dem Bundle abrufen.

Code:

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 

    MyListAdapter adapter = new MyListAdapter(getActivity(), 
      R.layout.my_row, titles, icons, this); 

    setListAdapter(adapter); 

    if (savedInstanceState != null) { 
     // Never goes inside this condiiton. 
     // Restore last state for checked position. 
     mCurCheckPosition = savedInstanceState.getInt("curChoice", 0); 
    } 
} 

@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putInt("curChoice", mCurCheckPosition); 
} 
+0

versuchen Sie einige log.v Methoden, und senden Sie die Logcat. Dies wird zeigen, wo das Programm wechselt –

+0

gibt es eine weitere Möglichkeit, die Sie 'SharedPreferences' verwenden können –

+0

Ist es die ganze Zeit Fehler oder nur das erste Mal, wenn Sie die Anwendung öffnen? – Otra

Antwort

0

Dann bedeutet es, dass Ihre Aktivität und Fragment wurden nur angehalten und musste nicht ihre Instanz Zustand zu speichern (onSaveInstanceState() ist nicht unbedingt genannt).

Wenn Sie sicherstellen möchten, dass onSaveInstanceState() aufgerufen wird, wählen Sie in den Entwicklereinstellungen des Geräts "Aktivitäten nicht beibehalten" aus. Jedes Mal, wenn eine Aktivität pausiert wird, wird sie vom System gecancelt und der Aufruf wird an onSaveInstanceState() (außer wenn Sie nur zurück drücken natürlich)

+0

Nein, beim Debuggen 'onSaveInstanceState()' wird aufgerufen. Meine Frage wurde aktualisiert – reiley

Verwandte Themen