2016-11-07 4 views
0

Also, ich weiß, ist Frage dupliziert, aber ich habe keine Lösung in diesen Antworten gefunden. Ich habe eine MainActivity und GameDetailActivity. MainActivity hierarchisches Elternelement von GameDetailActivity. Hier ist es Erklärungen in Manifest-Datei:Android: Aktivität onCreate savedInstanceState ist immer null

<activity 
     android:name=".MainActivity" 
     android:screenOrientation="portrait" 
     android:theme="@style/AppTheme2" 
     android:noHistory="false" 
     > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN"/> 

      <category android:name="android.intent.category.LAUNCHER"/> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name=".GameDetailActivity" 
     android:theme="@style/AppTheme2" 
     android:parentActivityName=".MainActivity" 
     android:noHistory="false" 
     > 
     <meta-data 
      android:name="android.support.PARENT_ACTIVITY" 
      android:value="de.exam.example.MainActivity"/> 
    </activity> 

hier AppTheme2 Erklärung:

<style name="AppTheme2" parent="Theme.AppCompat.Light.DarkActionBar"> 
    <!-- Customize your theme here. --> 
    <item name="android:windowActionBar">false</item> 
    <item name="android:windowNoTitle">true</item> 
    <item name="windowActionBar">false</item> 
    <item name="windowNoTitle">true</item> 

    <item name="colorPrimary">@color/colorPrimary</item> 
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
    <item name="colorAccent">@color/colorAccent</item> 
</style> 

hier zurück Logik in GameDetailActivity:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case android.R.id.home: 
      Intent upIntent = NavUtils.getParentActivityIntent(this); 
      if (NavUtils.shouldUpRecreateTask(this, upIntent)) { 
       TaskStackBuilder.create(this) 
         .addNextIntentWithParentStack(upIntent) 
         .startActivities(); 
      } else { 
       NavUtils.navigateUpTo(this, upIntent); 
      } 
      return true; 
     default:break; 
    } 
    return super.onOptionsItemSelected(item); 
} 

und wenn ich drücken home (back "< - ") Button in GameDetailActivity Ich bekomme immer savedInstanceState ist in MainActivity null. Ich verstehe nicht, warum gespeicherte Daten in MainActivity verloren gegangen sind.

EDIT

Hier starten GameDetailActivity Code:

Intent i = new Intent(getActivity(), GameDetailActivity.class); 
i.putExtra("game", clickedGame); 
startActivity(i); 

Jeder weiß, wie dieses Problem beheben?

Vielen Dank im Voraus

+0

Geben Sie den Code ein, mit dem Sie 'GameDetailActivity' starten. – earthw0rmjim

+0

Überprüfen Sie dies: http://Stackoverflow.com/a/15933890/758104 –

+0

@ earthw0rmjim Ich habe Startcode GameDetailActivity, Blick auf den bearbeiteten Bereich –

Antwort

1

mit einem neuen Rücken Stapel oben navigieren

Wenn der Benutzer den Knopf nach oben drückt, nachdem Ihre Aktivität von einer anderen App Aufgabe, Ihre App Eingabe startet eine new task with die entsprechende Zurück Stapel vor dem Navigieren.

Lösung

Navigation nach oben Übergeordnetes Aktivität

Wenn Sie diese Methode aufrufen, wird die aktuelle Aktivität beendet und startet (or resumes) die entsprechende Aktivität Eltern. Wenn die Zielmutterschaft Aktivität im Back-Stack der Task ist, ist es brought forward. Die Art und Weise es vorgebracht wird, hängt davon ab, ob die übergeordnete Aktivität einen onNewIntent() -Aufruf verarbeiten kann.

Source


@Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
     // Respond to the action bar's Up/Home button 
     case android.R.id.home: 
      NavUtils.navigateUpFromSameTask(this); 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 
1

Wenn gesetzt, und die Aktivität gestartet wird, ist bereits in der aktuelle Aufgabe ausgeführt wird, dann anstatt eine neue Instanz dieser Aktivität starten, die alle die anderen oben genannten Aktivitäten werden geschlossen und diese Absicht wird an die (jetzt oben) alte Aktivität als neue Absicht geliefert werden. Auch dies wird Ihr Problem

public boolean onOptionsItemSelected(MenuItem item) { 
    if (item.getItemId()== android.R.id.home) { 
     Intent intent = NavUtils.getParentActivityIntent(this); 
     intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     NavUtils.navigateUpTo(this, intent); 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 
+0

Ich habe bereits versucht, das ist, nicht geholfen –

1

Das savedInstanceState Bündel wird immer gespeichert in onSaveInstanceState() lösen.

onSaveInstanceState() wird aufgerufen, wenn das Betriebssystem Activity zerstört (um beispielsweise Ressourcen zurückzufordern oder aufgrund einer Konfigurationsänderung), wird nicht garantiert, dass es aufgerufen wird, indem einfach durch Aktivitäten navigiert wird.

+0

Empfehlen Sie andere Varianten wie SharedPreference verwenden, statische Felder in der Anwendungsklasse? –

+0

Es ist schwierig, eine Lösung vorzuschlagen, ohne genau zu wissen, was Sie erreichen möchten. 'SharedPreferences' könnte eine mögliche Lösung sein, um die Daten zu erhalten. Wenn Sie die Daten auch in 'GameDetailActivity' verwenden möchten, können Sie sie einfach in der 'Absicht' als Extra übergeben. – earthw0rmjim

Verwandte Themen