Android: Modifier les éléments du Menu ActionBar de Fragment

est-ce que quelqu'un peut donner un exemple rapide de la façon de changer le contenu d'une barre D'action D'activité basée sur quelque chose qui se passe dans un fragment? Mon but:

Normal éléments de menu -> quelque Chose dans le fragment est déplacé -> les éléments de menu modifier pour enregistrer / supprimer des boutons.

ma première impulsion est de mettre en place des récepteurs de diffusion à la fois dans l'activité et dans le fragment pour croiser la conversation, mais je ne suis pas sûr que ce soit correct.

15
demandé sur dandan78 2012-03-09 05:08:52

4 réponses

les Fragments peuvent changer le menu dans actionbar. Pour cela, vous devez ajouter nécessaire drapeau du fragment oncreate() utilisation de la méthode setHasOptionsMenu(true);

Lorsque votre fragment est chargé, vous obtiendrez appel à onCreateOptionsMenu(Menu menu, MenuInflater inflater) comme dans une activité. Puis faire les changements nécessaires à votre menu.

sauvegardez le menu comme global dans fragment, et chaque fois que vous voulez faire un changement, appliquez-le.

21
répondu vakman 2015-01-07 11:11:22

La suivante fonctionne pour moi. J'ai une classe qui implémente ListView.MultiChoiceModeListener à l'intérieur d'un Fragment:

public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) {
    // Choose the correct Action Bar menu to display
    int menu = myCondition == true ? R.menu.my_default_menu : R.menu.my_menu_2;

    // Configure to use the desired menu
    mode.getMenu().clear();
    MenuInflater inflater = getActivity().getMenuInflater();
    inflater.inflate(menu);
}

étant donné que vous détectez 'quelque chose dans le fragment a bougé', s'étendant ListView.MultiChoiceModeListener ne fonctionne pas pour vous, mais nous espérons que cette montre comment modifier le menu. La clé est d'avoir accès à un ActionMode instance.

7
répondu Chris Lacy 2012-03-13 11:10:08

je pense que si vous voulez utiliser un mode d'action contextuel. Sur l'événement de traînée, vous lancerez un nouveau mode D'Action qui peut remplacer le contenu de la barre d'action avec des éléments de menu spécifiques à ce que vous voulez permettre à l'utilisateur de faire. Une fois que l'utilisateur choisit une action, vous terminez le mode d'action et la barre d'action revient à son état précédent.

4
répondu David Smith 2012-04-12 17:13:38

Je ne suis pas sûr qu'une instance D'ActionBar puisse vous aider avec le menu mais serait sûrement utile.. Voici un moyen d'obtenir à ce sujet

essayez ceci pour obtenir L'ActionBar de la FragmentActivity en utilisant la méthode onAttach(Activity) dans le Fragment.

tout D'abord faire un objet global de votre Fragmentactivité dans le Fragment comme ceci

public class YourFragment extends Fragment {

  private YourFragmentActivity context;
}

Remplacer ce dans le YourFragment classe

@Override
public void onAttach(Activity activity){
    context = (YourFragmentActivity)activity;
    super.onAttach(activity);
}

puis dans la méthode OnCreate dans le YourFragment ce faire

@Override
public View onCreateView(LayoutInflater inflater,
                         ViewGroup container, Bundle savedInstanceState){
    ...

    android.support.v7.ActionBar actionBar = context.getSupportActionBar();

    ...
}
1
répondu Abhishek Jebaraj 2017-02-15 21:17:35