2016-11-07 4 views
0

Donc, je sais que la question est en double, mais je n'ai pas trouvé de solution dans ces réponses. J'ai une MainActivity et une GameDetailActivity. Parent hiérarchique MainActivity de GameDetailActivity. Ici, il est des déclarations dans le fichier manifeste:Android: Activity onCreate savedInstanceState allways est 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> 

ici Déclaration AppTheme2:

<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> 

ici retour logique 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); 
} 

et quand je presse la maison vers le haut (retour "< - ") dans GameDetailActivity Je m'obtiens toujours savedInstanceState est null dans MainActivity. Je ne comprends pas pourquoi les données enregistrées ont été perdues dans MainActivity.

EDIT

Commencez ici Code GameDetailActivity:

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

Quelqu'un sait comment résoudre ce problème?

Nous vous remercions à l'avance

+0

Déposez le code où vous démarrez 'GameDetailActivity'. – earthw0rmjim

+0

Vérifiez cela: http://stackoverflow.com/a/15933890/758104 –

+0

@ earthw0rmjim J'ai ajouté le code de démarrage GameDetailActivity, regardez à la zone éditée –

Répondre

1

Naviguer vers le haut avec une nouvelle pile de retour

Lorsque l'utilisateur appuie sur le bouton Up après avoir entré votre activité de la tâche d'une autre application, votre application démarre un new task with le approprié retour pile avant de naviguer vers le haut.

Solution

Naviguer vers le haut à l'activité parent

Lorsque vous appelez cette méthode, il termine l'activité en cours et commence (or resumes) l'activité mère appropriée. Si l'activité parent parent est dans la pile arrière de la tâche, elle est brought forward. La manière dont elle est avancée dépend de la capacité de l'activité parente à gérer un appel onNewIntent().

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

Si ensemble, et l'activité en cours de lancement est déjà en cours d'exécution dans la tâche en cours , puis au lieu de lancer une nouvelle instance de cette activité , tous les autres activités seront fermées et cette intention sera livrée à l'ancienne activité (maintenant en haut) en tant que nouvelle intention. cette mai permettra de résoudre votre problème

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

J'ai déjà essayé ceci est, pas aidé –

1

Le faisceau savedInstanceState est enregistré dans se onSaveInstanceState().

onSaveInstanceState() est appelée lorsque le système d'exploitation détruit le Activity (pour récupérer des ressources par exemple, ou en raison d'un changement de configuration), il n'est pas garanti d'être appelé simplement en naviguant parmi les activités.

+0

Recommandez-vous d'utiliser d'autres variantes comme SharedPreference, champs statiques dans la classe d'application? –

+0

Il est difficile de proposer une solution sans savoir exactement ce que vous essayez d'atteindre. 'SharedPreferences' pourrait être une solution possible pour conserver les données. Si vous souhaitez également utiliser les données dans 'GameDetailActivity', vous pouvez simplement le passer dans le Intent comme un extra. – earthw0rmjim