Le bouton " up "d'ActionBar détruit l'activité des parents, le bouton "back" ne

j'ai une application Android relativement simple avec un Activity montrant une liste d'articles et un autre montrant les détails d'un article sélectionné. Je commence l'activité list, qui est mon activité principale (en utilisant FLAG_ACTIVITY_CLEAR_TOP pour effacer l'activité de connexion à partir de laquelle elle est appelée) avec:

Intent intent = new Intent(this, ListInstancesActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();

et, dans le cadre de cette activité, j'agis sur un article sélectionné avec:

Intent detailIntent = new Intent(this, ShowInstanceActivity.class);
detailIntent.putExtra(ShowInstanceFragment.ARG_ITEM_ID, id);
startActivity(detailIntent);

Tout fonctionne bien, et si j'utilise la touche "retour" puis je retourne au ListInstancesActivity comme je m'y attendais. Cependant, si j'appuie sur le bouton back/up de la barre d'action, alors il détruit et recrée le ListInstancesActivity . C'est mauvais, car cela coûte relativement cher sur le plan informatique.

Comment puis-je faire que la barre d'action se comporte de la même manière que le softkey et retourne à l'activité précédente plutôt que de la détruire.

Il convient de noter que je suis en utilisant la bibliothèque de prise en charge de la version de la actionbar.

les parties pertinentes de mon AndroidManifest.xml sont

<activity
  android:name=".agenda.ListInstancesActivity"
  android:label="@string/list_instances_activity_title">
</activity>
<activity
  android:name=".agenda.ShowInstanceActivity"
  android:label="@string/show_instance_activity_title"
  android:parentActivityName=".agenda.ListInstancesActivity">
</activity>
42
demandé sur jgm 2014-03-05 00:57:48

4 réponses

vous pouvez outrepasser ce que le bouton actionbar up devrait faire comme:

public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {

case android.R.id.home:
    onBackPressed();
    return true;
}

return super.onOptionsItemSelected(item);
}

et recréer l'effet bouton arrière.

29
répondu Aashir 2014-03-04 21:18:27

dans le manifeste androïde.xml l'ajout de l'attribut suivant pour la balise parent activity a fonctionné pour moi.

android:launchMode="singleTop"

référence: http://developer.android.com/guide/topics/manifest/activity-element.html

se référer à la question similaire: Comment puis-je retourner à une activité parentale correctement?

85
répondu vikki_logs 2017-05-23 12:18:07

lorsque vous spécifiez l'activité parentale dans le manifeste, elle est redémarrée lorsque vous cliquez sur le bouton de Navigation haut dans la barre d'action.

vérifier ce que j'ai déjà répondu à cette question

https://stackoverflow.com/a/32401235/3479012

vous devez remplacer le bouton nevigation dans actionbar en y accédant par android.R. id.home in onOptionsItemSelected and do finish top activity.

3
répondu Jolson Da Costa 2017-05-23 12:26:11

on dirait que votre activité parentale n'est pas correctement configurée dans votre manifeste. Ajoutez ceci dans votre étiquette D'activité ShowInstanceActivity:

<meta-data android:name="android.support.PARENT_ACTIVITY" android:value=".agenda.ListInstancesActivity" />

ainsi, votre étiquette d'activité finale devrait ressembler à:

<activity
  android:name=".agenda.ShowInstanceActivity"
  android:label="@string/show_instance_activity_title"
  android:parentActivityName=".agenda.ListInstancesActivity">
  <meta-data android:name="android.support.PARENT_ACTIVITY" android:value=".agenda.ListInstancesActivity" />
</activity>
1
répondu T3KBAU5 2014-03-04 21:22:43