web-dev-qa-db-fra.com

Écouteur onClick de la barre d'action pour le bouton Accueil

Comment puis-je implémenter un onClickListener personnalisé pour le bouton Accueil de la barre d'actions?

J'ai déjà effectué une getSupportActionBar().setDisplayHomeAsUpEnabled(true); et je souhaite maintenant rediriger l'utilisateur vers une activité donnée au cas où le bouton Home serait cliqué.

J'ai essayé avec:

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case Android.R.id.home:
            item.setOnMenuItemClickListener(new OnMenuItemClickListener() {
                public boolean onMenuItemClick(MenuItem item) {
                    Intent i = new Intent();
                    i.setClass(BestemmingActivity.this, StartActivity.class);
                    i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    startActivity(i);
                    return true;
                }
            });
        default:
            return super.onOptionsItemSelected(item);
        }
    }

mais il n'entre jamais dans le onMenuItemClick.

Fondamentalement, cela se fait comme dans ce lien mais cela n’entre toujours pas dans l’auditeur.

80
noloman

Correction: pas besoin d'utiliser un setOnMenuItemClickListener. Il suffit d'appuyer sur le bouton pour créer et lancer l'activité à travers l'intention.

Merci beaucoup à tous pour votre aide!

7
noloman

J'utilise le actionBarSherlock , après avoir défini supportActionBar.setHomeButtonEnabled(true);
nous pouvons remplacer la méthode onMenuItemSelected:

@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {

    int itemId = item.getItemId();
    switch (itemId) {
    case Android.R.id.home:
        toggle();

        // Toast.makeText(this, "home pressed", Toast.LENGTH_LONG).show();
        break;

    }

    return true;
}

J'espère que ce travail pour vous ~~~ bonne chance

110
lynn8570

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 true;
    }

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

si nous utilisons la barre d'action donnée par le système, le code suivant fonctionne bien

getActionBar().setHomeButtonEnabled(true);

@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {

    int itemId = item.getItemId();
    switch (itemId) {
    case Android.R.id.home:
      //do your action here.
        break;

    }

    return true;
}
21
raju

Vous devez activer explicitement l'action home si vous l'utilisez sur ICS. De les docs :

Remarque: si vous utilisez l'icône pour accéder à l'activité principale, prenez garde à ce que le symbole commençant par Android 4.0 (API de niveau 14)), vous devez activer explicitement l'icône en tant qu'élément d'action en appelant setHomeButtonEnabled. (true) (dans les versions précédentes, l’icône était activée par défaut comme élément d’action).

3
Nikolay Elenkov

Le meilleur moyen de personnaliser la barre d’action onClickListener est onSupportNavigateUp ()

Ce code sera utile lien pour aider le code

2
Naeem Ibrahim

répond dans la moitié de ce qui se passe. si onOptionsItemSelected ne contrôle pas homeAsUp, le bouton lorsque l'activité parent est définie dans le système manifest.xml passe à l'activité parent. utiliser comme ceci dans la balise d'activité:

<activity ... >
<meta-data
Android:name="Android.support.PARENT_ACTIVITY"
Android:value="com.activities.MainActivity" /> 
</activity>
1
David