459 votes

Menu Options Android dans le Fragment

J’essaie d’ajouter un élément dans le menu options d’un groupe de fragments.

J’ai créé un nouveau `` de classe et cela étendu pour les fragments je souhaite inclure dans l’élément de menu. Voici le code :

Pour une raison quelconque le `` ne semble ne pas fonctionner.

Toute aide serait appréciée.

682voto

Kuffs Points 12318

Avez-vous appelé la méthode super ?

Mettre les instructions log dans le code pour voir si la méthode n’est pas appelée, ou si le menu n’est pas modifié par votre code.

Également s’assurer que vous appelez en pour notifier le fragment qu’il devrait participer à la gestion de menu d’options.

219voto

Marco HC Points 983

J'ai eu le même problème, mais je pense que c'est mieux de résumer et de présenter la dernière étape pour le faire fonctionner:

  1. Ajouter setHasOptionsMenu(vrai) méthode dans votre Fragment de la onCreate(Bundle savedInstanceState) méthode.

  2. Remplacer onCreateOptionsMenu(Menu menu) (si vous voulez faire quelque chose de différent dans votre Fragment du menu) et onOptionsItemSelected(MenuItem item) méthodes dans votre Fragment.

  3. À l'intérieur de votre onOptionsItemSelected(MenuItem item) de l'Activité de méthode, assurez-vous de retourner la valeur false lorsque l'élément de menu d'action serait mis en œuvre en onOptionsItemSelected(MenuItem item) Fragment de la méthode.

Un exemple:

L'activité

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getSupportMenuInflater();
    inflater.inflate(R.menu.main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case R.id.activity_menu_item:
        // Do Activity menu item stuff here
        return true;
    case R.id.fragment_menu_item:
        // Not implemented here
        return false;
    default:
        break;
    }

    return false;
}

Fragment

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(true);
    ....
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    // Do something that differs the Activity's menu here
    super.onCreateOptionsMenu(menu, inflater);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case R.id.activity_menu_item:
        // Not implemented here
        return false;
    case R.id.fragment_menu_item:
        // Do Fragment menu item stuff here
        return true;
    default:
        break;
    }

    return false;
}

J'espère que ce sera utile.

Des acclamations.

162voto

Matthew Blackford Points 1429

Si vous trouvez la méthode n’est pas invoquée, assurez-vous que vous appelez ce qui suit à partir du Fragment méthode :

7voto

farid_z Points 375

J’ai eu le même problème, mon fragments étaient des pages d’un ViewPager. La raison pour laquelle qu'il se passait, c’est que je consommais enfant fragment gestionnaire plutôt que de la responsable du fragment support activité lors de l’instanciation de FragmentPagerAdapter.

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