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 ?

11voto

Shahriar Ahmad Points 85

Vous devez d'abord écrire ce code

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

Ajoutez ensuite cette ligne dans le manifeste

 <activity android:name=".MainActivity"
            android:parentActivityName=".PreviousActivity"></activity>

Je pense que ça va marcher

9voto

M Anees Points 21

Tout d'abord dans la fonction onCreate ajouter la ligne suivante

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

et ensuite ajouter la fonction suivante dans le code :

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

        return super.onOptionsItemSelected(item);
    }

7voto

Ruzin Points 1316

Si votre activité s'étend AppCompatActivity vous devez remplacer l'option onSupportNavigateUp() de la manière suivante :

public class SecondActivity extends AppCompatActivity {

   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_second);
       Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
       setSupportActionBar(toolbar);
       getSupportActionBar().setHomeButtonEnabled(true);
       getSupportActionBar().setDisplayHomeAsUpEnabled(true);
       ...
   }

   @Override
   public void onBackPressed() {
       super.onBackPressed();
       this.finish();
   }

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

Manipulez votre logique dans votre onBackPressed() et appelez simplement cette méthode dans onSupportNavigateUp() donc le bouton retour du téléphone et la flèche de la barre d'outils font la même chose.

6voto

user2851687 Points 118

Si vous utilisez la nouvelle bibliothèque de support pour 5.1 dans Android studio, vous pouvez utiliser ceci dans votre AppCompatActivity.

 ActionBar actionBar = getSupportActionBar();
 actionBar.setHomeButtonEnabled(true);
 actionBar.setDisplayHomeAsUpEnabled(true);
 actionBar.setHomeAsUpIndicator(R.mipmap.ic_arrow_back_white_24dp);
 actionBar.setDisplayShowHomeEnabled(true);

Santé.

6voto

M.S.T Points 123

Après un temps de qualité, j'ai trouvé que l'option de thème est le principal problème dans mon code. Voici la façon correcte d'afficher la barre d'outils pour moi.

Dans le fichier AndroidManifest, vous devez d'abord modifier le style de votre thème.

Theme.AppCompat.Light.DarkActionBar
to 
Theme.AppCompat.Light.NoActionBar

puis, dans votre activité xml, vous devez appeler votre propre barre d'outils, comme suit

<androidx.appcompat.widget.Toolbar
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="@color/colorPrimary"
        android:id="@+id/toolbar"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        android:elevation="4dp"/>

Et ensuite, cette barre d'outils devrait être appelée dans votre fichier Java par

Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

Et pour l'affichage de la barre d'outils, vous devez vérifier le null pour éviter une NullPointerException.

if(getSupportActionBar() != null){
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}

Pour le retour de l'activité domestique, ajoutez ceci

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

        return super.onOptionsItemSelected(item);
    }

OU pour votre activité souhaitée retour

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

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