web-dev-qa-db-fra.com

Ajouter le bouton de retour à la barre d'action

J'ai essayé d'ajouter un bouton de retour à la barre d'action.

Je veux que ma vue ressemble à ceci: enter image description here

Je veux ajouter le bouton de retour à gauche de la barre d'action.

J'ai ajouté ce code

ActionBar actionBar = getActionBar();

actionBar.setDisplayHomeAsUpEnabled(true);

mais ça ne marche pas.

Comment puis-je réparer cela?

60
haythem souissi

Après réglage actionBar.setHomeButtonEnabled(true);

Ajoutez le code suivant:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case Android.R.id.home:
            // app icon in action bar clicked; goto parent activity.
            this.finish();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}
126
Danesh

Ajouter

actionBar.setHomeButtonEnabled(true);

puis ajoutez ce qui suit

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

Comme suggéré par naXa , j'ai ajouté une vérification sur la variable itemId pour qu'elle fonctionne correctement s'il y avait plusieurs boutons dans la barre d'action.

54
clami219

celui-ci a fonctionné pour moi:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_your_activity);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    // ... other stuff
}

@Override
public boolean onSupportNavigateUp(){
    finish();
    return true;
}

La méthode onSupportNavigateUp () est appelée lorsque vous utilisez le bouton Précédent de SupportActionBar.

26
Jason Saruulo

Après mise 

 actionBar.setHomeButtonEnabled(true);

Vous devez configurer l'activité parente dans votre AndroidManifest.xml

<activity
    Android:name="com.example.MainActivity"
    Android:label="@string/app_name"
    Android:theme="@style/Theme.AppCompat" />
<activity
    Android:name="com.example.SecondActivity"
    Android:theme="@style/Theme.AppCompat" >
    <meta-data
        Android:name="Android.support.PARENT_ACTIVITY"
        Android:value="com.example.MainActivity" />
</activity>

Regardez ici pour plus d'informations http://developer.Android.com/training/implementing-navigation/ancestral.html

24
BoschAlex

Il y a deux façons d'aborder cela.

Option 1: Mettre à jour le manifeste Android .__ Si les paramètres Activité sont toujours appelés à partir de la même activité, vous pouvez créer la relation dans le manifeste Android. Android affichera automatiquement le bouton 'Précédent' dans la barre d'actions

<activity
    Android:name=".SettingsActivity"
    Android:label="Setting Activity">
    <meta-data
        Android:name="Android.support.PARENT_ACTIVITY"
        Android:value="com.example.example.MainActivity" />
</activity>

Option 2: modifiez un paramètre pour la barre d'actions Si vous ne savez pas quelle activité appellera l'activité Paramètres, vous pouvez le créer comme ceci. Premier de votre activité qui étend ActionBarActivity (assurez-vous que vos @imports correspondent au niveau de compatibilité recherché).

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_settings_test);
    ActionBar actionBar = getSupportActionBar();
    actionBar.setHomeButtonEnabled(true);
    actionBar.setDisplayHomeAsUpEnabled(true);
}

Ensuite, détectez le bouton «Retour», appuyez sur et dites à Android de fermer l'activité actuellement ouverte.

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case Android.R.id.home:
            // app icon in action bar clicked; goto parent activity.
            this.finish();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

Ça devrait le faire!

10
Von Iobro

Vous aurez besoin de comparer menuItem.getItemId() avec Android.R.id.home dans la méthode onOptionsItemSelected

Dupliquer de Bouton Android Sherlock ActionBar Up

6
advantej

Utilisez-le pour afficher le bouton de retour et passer à l’activité précédente,

final ActionBar actionBar = getSupportActionBar();
        assert actionBar != null;
        actionBar.setDisplayHomeAsUpEnabled(true);
        actionBar.setHomeAsUpIndicator(R.drawable.back_dark);


@Override
    public boolean onOptionsItemSelected(final MenuItem item) {

        switch (item.getItemId()) {
            case Android.R.id.home:
                onBackPressed();
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }
6
Amit Vaghela

Plus simple et meilleur: Pour API> = 16

Ajoutez simplement "parentActivityName" pour chaque activité dans Manifest. Le bouton Précédent vous amènera automatiquement à l'activité parent.

<activity
        Android:name="com.example.myfirstapp.DisplayMessageActivity"
        Android:label="@string/title_activity_display_message"
        Android:parentActivityName="com.example.myfirstapp.MainActivity" >
6
M. Usman Khan

Tout d'abord, utilisez ceci: 

ActionBar bar = getSupportActionBar();
bar.setDisplayHomeAsUpEnabled(true);

Puis définissez l'opération de clic sur le bouton dans la méthode onOptionsItemSelected

 @Override
 public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case Android.R.id.home:
         finish();
        return true;
     default:
        return super.onOptionsItemSelected(item);
  }
 }
5
Arunendra

si quelqu'un d'autre a besoin de la solution

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();

    if (id == Android.R.id.home) {
        onBackPressed();
    }

    return super.onOptionsItemSelected(item);
}
5
Saad Mahmud

Ajouter cette ligne dans la méthode onCreate ()

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

puis substituez cette méthode

 @Override
    public boolean onSupportNavigateUp(){
        finish();
        return true;
    }
1
Tsanguu