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.
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.
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.
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.
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();
...
}