149 votes

Comment mettre en œuvre le bouton retour de la barre d'action Android ?

J'ai une activité avec une vue de liste. Lorsque l'utilisateur clique sur l'élément, la "visionneuse" de l'élément s'ouvre :

List1.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {

        Intent nextScreen = new Intent(context,ServicesViewActivity.class);
        String[] Service = (String[])List1.getItemAtPosition(arg2);

        //Sending data to another Activity
        nextScreen.putExtra("data", datainfo);
        startActivityForResult(nextScreen,0);
        overridePendingTransition(R.anim.right_enter, R.anim.left_exit);
    }
});

Cela fonctionne bien, mais dans la barre d'action, la flèche de retour à côté de l'icône de l'application ne s'active pas. Est-ce que quelque chose m'échappe ?

66 votes

getActionBar().setDisplayHomeAsUpEnabled(true); dans onCreate et switch (item.getItemId()) {case android.R.id.home: onBackPressed();break;} sur onOptionsItemSelected ? les deux dans ServicesViewActivity

8 votes

Pourquoi ne pas répondre par des étagères ?

1voto

user2823506 Points 11

Si vous utilisez la Toolbar, j'étais confronté au même problème. Je l'ai résolu en suivant ces deux étapes

  1. Dans le fichier AndroidManifest.xml

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

  2. Dans la deuxième activité, ajoutez les éléments suivants...

    Toolbar toolbar = findViewById(R.id.second_toolbar); setSupportActionBar(toolbar); getSupportActionBar().setDisplayShowTitleEnabled(false); getSupportActionBar().setDisplayHomeAsUpEnabled(true);

0voto

RCB Points 146

J'ai essayé moi-même et une chose qui a fonctionné pour moi :

        when(item.itemId) {
            R.id.action_signup -> signup() //other menu item
            android.R.id.home -> viewRoot.findNavController().navigateUp() //back 
        }

        return super.onOptionsItemSelected(item)
    }

J'utilise une navigation Jetpack donc c'est l'appel pour obtenir le NavController.

0voto

datchung Points 1586

En m'appuyant sur la réponse de Jared, j'ai dû activer et mettre en œuvre le comportement du bouton retour de la barre d'action dans plusieurs activités et j'ai créé cette classe d'aide pour réduire la duplication du code.

public final class ActionBarHelper {
    public static void enableBackButton(AppCompatActivity context) {
        if(context == null) return;

        ActionBar actionBar = context.getSupportActionBar();
        if (actionBar == null) return;

        actionBar.setDisplayHomeAsUpEnabled(true);
    }
}

Utilisation dans une activité :

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ...

    ActionBarHelper.enableBackButton(this);
}

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