102 votes

Comment remplacer le bouton de retour de la barre d'action dans Android ?

Je veux personnaliser le bouton de retour de l'activité dans la barre d'action, et non dans le bouton de retour de la touche de raccourci. J'ai remplacé le bouton onBackPressed() méthode. Cela fonctionne avec le bouton retour de mon émulateur, mais pas avec le bouton retour de la barre d'action.

Je veux que ça se passe avec la barre d'action. Comment puis-je le faire ?

Voici mon code :

@Override
public void onBackPressed() {
    Toast.makeText(getApplicationContext(),"Back button clicked", Toast.LENGTH_SHORT).show(); 
    return;
}

J'ai utilisé ce toast pour savoir si le retour pressé fonctionne ou non, mais la mise en œuvre réelle change comme pour revenir à l'activité précédente. Mais cela ne fonctionne pas avec le bouton présent en haut de la barre d'action (à côté du titre de l'activité).

S'il vous plaît quelqu'un pourrait me spécifier le problème.

6voto

(1) Ajouter l'activité Parent pour votre activité enfant (AndroidManifest.xml)

<activity
        android:name=".ParentActivity" />

(2) Remplacer la méthode onSupportNavigateUp dans l'activité enfant.

@Override
public boolean onSupportNavigateUp() {
    onBackPressed();
    return false;
}

4voto

Vivek Hande Points 181

J'y suis parvenu en suivant simplement deux étapes,

Etape 1 : allez dans AndroidManifest.xml et dans le tag ajoutez le paramètre - Android:parentActivityName=".home.HomeActivity"

exemple :

 <activity
    android:name=".home.ActivityDetail"
    android:parentActivityName=".home.HomeActivity"
    android:screenOrientation="portrait" />

Étape 2 : dans ActivityDetail, ajoutez votre action pour la page/activité précédente.

exemple :

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

2voto

Leo Droidcoder Points 5410

Si vous souhaitez revenir à la instance précédente d'une activité en appuyant sur le bouton d'accueil de la barre d'action, sans recréer vous pouvez surcharger la méthode getParentActivityIntent pour utiliser celle de la pile arrière :

@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
@Override
public Intent getParentActivityIntent() {
      return super.getParentActivityIntent().addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
}

EDITAR:
Vous pouvez également obtenir le même résultat en
la mise en place de la launchMode de votre activité mère à singleTop.
Alors mettez android:launchMode="singleTop" à l'activité des parents dans votre manifeste.
Vous pouvez également utiliser le drapeau FLAG_ACTIVITY_CLEAR_TOP avec l'intention UP.
référence : Fournir une navigation vers le haut

0voto

Roshaan Qurban Points 51
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    if (id == android.R.id.home) {
        onBackPressed();
        return true;
    }
    //noinspection SimplifiableIfStatement
    if (id == R.id.signIn) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}
///////////////////
@Override
public void onBackPressed() {
    super.onBackPressed();
    finish();
}

0voto

Jiří Points 65

Il existe plusieurs façons de mettre en place le bouton de retour dans la barre :

1) méthode .setDisplayHomeAsUpEnabled(true); le fera, et ensuite vous pouvez simplement remplacer android.R.id.home

2) en ajoutant <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="my.package.parrent" /> dans Android Manifest, mais dans ce cas vous ne peut pas contourner android.R.id.home dans OnOptionsMenuSelected.

... pour ceux qui se demandent pourquoi ça ne marche pas pour eux...

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