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 ?
Réponses
Trop de publicités?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
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);
}
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.
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é.
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;
}