140 votes

Android - Bouton Précédent dans la barre de titre

Dans de nombreuses applications (Calendrier, Drive, Play Store), lorsque vous appuyez sur un bouton et entrez une nouvelle activité, l'icône dans la barre de titre se transforme en bouton retour, mais pour l'application que je suis en train de créer, ce n'est pas le cas. Comment faire pour que cette icône vous ramène à l'écran précédent ?

176voto

Luke F. Points 330

Il y a deux étapes simples pour créer un bouton retour dans la barre de titre :

Tout d'abord, rendez l'icône de l'application cliquable à l'aide du code suivant dans l'activité dont vous voulez faire figurer le bouton de retour dans la barre de titre :

ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);

Après avoir ajouté le code ci-dessus, vous verrez apparaître une flèche de retour à gauche de l'icône de l'application.

enter image description here

Deuxièmement, une fois que vous avez fait ce qui précède, vous devez encore créer le code qui tirera parti de l'événement de clic. Pour ce faire, sachez que, lorsque vous cliquez sur l'icône de l'application, un événement de type onOptionsItemSelected est appelée. Donc pour revenir à l'activité précédente, ajoutez cette méthode à votre activité et mettez Intent qui vous ramènera à l'activité précédente. Par exemple, disons que l'activité que vous essayez d'atteindre revenir à s'appelle MyActivity . Pour y revenir, écrivez la méthode comme suit :

public boolean onOptionsItemSelected(MenuItem item){
    Intent myIntent = new Intent(getApplicationContext(), MyActivity.class);
    startActivityForResult(myIntent, 0);
    return true;
}

C'est ça !

(Dans l'API des développeurs Android, il est recommandé de manipuler le manifeste et d'ajouter des éléments tels que android:parentActivityName . Mais cela ne semble pas fonctionner pour moi. La méthode ci-dessus est plus simple et plus fiable).

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

Et dans votre activité

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

66voto

Anupam Points 451

Utiliser ce code

 @Override
 public void onCreate(Bundle savedInstanceState) {
    ...
   getActionBar().setDisplayHomeAsUpEnabled(true);
 } 

après cela, écrivez ce code dans onOptionsItemSelected méthode

  int id = item.getItemId();

     if (id==android.R.id.home) {
        finish();
    }

60voto

Lucy Fair Points 571

J'ai enfin réussi à ajouter correctement le bouton de retour à la barre d'action/barre d'outils.

@Override
public void onCreate(Bundle savedInstanceState) {
    ...
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}  

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            finish();
            return true;
    }

    return super.onOptionsItemSelected(item);
}

public boolean onCreateOptionsMenu(Menu menu) {
    return true;
}

20voto

Xabier Points 1090

1.- Ajouter l'activité à AndroidManifest.xml et assurez-vous de fournir les méta-données :

<activity
    android:name="com.example.myfirstapp.DisplayMessageActivity"
    android:label="@string/title_activity_display_message"
    android:parentActivityName="com.example.myfirstapp.MainActivity" >
    <!-- Parent activity meta-data to support 4.0 and lower -->
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value="com.example.myfirstapp.MainActivity" />
</activity>

2 - Ajoutez le code suivant à la méthode onCreate de l'activité :

@Override
public void onCreate(Bundle savedInstanceState) {
    ...
    getActionBar().setDisplayHomeAsUpEnabled(true);
} 

3 - Remplacez le onOptionsItemSelected et utilisez la méthode statique NavUtils.navigateUpFromSameTask() pour naviguer dans la pile.

@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);
}

Cependant, l'utilisation de navigateUpFromSameTask() ne convient que lorsque votre application est le propriétaire de la tâche en cours (c'est-à-dire que l'utilisateur a commencé cette tâche à partir de votre application). Si ce n'est pas le cas et que votre activité a été démarrée dans une tâche qui appartient à une autre application, alors la navigation vers le haut doit créer des une nouvelle tâche qui appartient à votre application, ce qui nécessite la création d'une nouvelle pile arrière.

13voto

tot Points 121

Si votre activité s'étend à l'activité

public class YourActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_xxx);

        getActionBar().setHomeButtonEnabled(true);

        [...]
    }

    [...]
}

Si votre action s'étend à AppCompatActivity

public class YourActivity extends AppCompatActivity {

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_xxx);

            getSupportActionBar().setHomeButtonEnabled(true);

            [...]
        }

        [...]
    }

Rien plus à faire, Voir Additionner les actions

[FACULTATIF] Pour définir explicitement l'activité parentale, modifiez votre Manifest.xml comme suit :

<application ... >
    ...
    <!-- The main/home activity (it has no parent activity) -->
    <activity
        android:name="com.example.myfirstapp.MainActivity" ...>
        ...
    </activity>
    <!-- A child of the main activity -->
    <activity
        android:name="com.example.myfirstapp.YourActivity "
        android:label="@string/title_activity_display_message"
        android:parentActivityName="com.example.myfirstapp.MainActivity" >
        <!-- Parent activity meta-data to support 4.0 and lower -->
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.example.myfirstapp.MainActivity" />
    </activity>
</application>

Voir Spécifier l'activité parentale

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X