web-dev-qa-db-fra.com

ActionBar 'up' bouton détruit l'activité parent, 'retour' ne pas

J'ai une application Android relativement simple avec une Activity affichant une liste d'éléments et une autre affichant les détails d'un élément sélectionné. Je commence l'activité de liste, qui est mon activité la plus importante (en utilisant FLAG_ACTIVITY_CLEAR_TOP pour effacer l'activité de connexion à partir de laquelle elle s'appelle) avec:

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

et à partir de cette activité, j'agis sur un élément 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 le bouton 'Retour' de la touche programmable, je reviens à la ListInstancesActivity comme je m'y attendais. Cependant, si à la place j'appuie sur le bouton précédent/précédent de la barre d'action, il détruit et recrée la ListInstancesActivity. C'est mauvais, car cela coûte relativement cher en calcul.

Comment puis-je faire en sorte que la barre d’action se comporte de la même manière que la touche programmable et revienne à l’activité précédente au lieu de la détruire?.

Il est à noter que j'utilise la version de la bibliothèque de support de la barre d'actions.

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

Vous pouvez remplacer ce que devrait faire le bouton haut de la barre d’action:

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

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

return super.onOptionsItemSelected(item);
}

Et recréez l’effet du bouton retour. 

29
Aashir

Dans le fichier manifest.xml Android, l'ajout de l'attribut suivant pour la balise d'activité parent a fonctionné pour moi.

Android:launchMode="singleTop"

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

Reportez-vous à la question similaire: Comment puis-je revenir correctement à une activité parent?

92
vikki_logs

lorsque vous spécifiez l'activité parent dans le manifeste, il est redémarré lorsque vous cliquez sur le bouton de navigation dans la barre d'actions.

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

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

vous devez remplacer le bouton de nevigation dans la barre d’action en y accédant par Android.R.id.home dans onOptionsItemSelected et de terminer l’activité en haut.

3
Jolson Da Costa

Il semble que votre activité parent ne soit pas configurée correctement dans votre manifeste. Ajoutez ceci dans votre balise d'activité ShowInstanceActivity:

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

Ainsi, votre balise d'activité finale devrait ressembler à ceci:

<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
T3KBAU5
 <?xml version="1.0" encoding="utf-8"?>

<application
    Android:allowBackup="true"
    Android:icon="@mipmap/ic_launcher"
    Android:label="@string/app_name"
    Android:roundIcon="@mipmap/ic_launcher_round"
    Android:supportsRtl="true"
    Android:theme="@style/AppTheme">
    <activity Android:name=".WelcomeActivity">
        <intent-filter>
            <action Android:name="Android.intent.action.MAIN" />

            <category Android:name="Android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity Android:name=".MainActivity" />
    <activity Android:name=".StartActivity" />
    <activity
        Android:name=".LoginActivity"
        Android:parentActivityName=".StartActivity"/>
    <activity
        Android:name=".RegisterActivity"
        Android:parentActivityName=".StartActivity"/>


    <activity Android:name=".SettingActivity">
    </activity>


</application>

Anyone can check this code and find error??/

Lorsque je clique sur le bouton de retour, l'application est automatiquement fermée ...

0
Syed Junaid