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?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.
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);
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;
}
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.
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>
- Réponses précédentes
- Plus de réponses