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