2012-03-09 16 views
14

¿Alguien puede dar un ejemplo rápido de cómo cambiar el contenido de una barra de acciones de la actividad en función de algo que tiene lugar en un fragmento? Mi intención:Android: Cambie los elementos del menú de ActionBar del Fragmento

elementos de menú normales -> Algo en el fragmento se mueve -> elementos de menú cambian para guardar/descartar botones.

Mi primer impulso es receptores de radiodifusión de configuración tanto en la actividad y el fragmento de la diafonía, pero no estoy seguro de si esto es correcto.

Respuesta

7

Lo siguiente funciona para mí. Tengo una clase personalizada que implementa ListView.MultiChoiceModeListener dentro de un Fragmento:

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

dado lo detecta 'algo en el fragmento se ha movido', que se extiende ListView.MultiChoiceModeListener puede no funcionar para usted, pero espero que esto ilustra cómo cambiar el menú. La clave es obtener acceso a una instancia ActionMode.

+0

Dónde se puede obtener un casos de ActionMode de la actividad? – Neilers

4

Creo que desea utilizar un contextual action mode. En el evento de arrastre, comenzará un nuevo modo de acción que puede reemplazar el contenido de la barra de acciones con elementos de menú específicos para lo que desea permitirle al usuario. Una vez que el usuario elige una acción, termina el modo de acción y la barra de acción vuelve a su estado anterior.

20

Los fragmentos pueden cambiar el menú en la barra de acciones. Para eso hay que añadir la bandera necesaria en oncreate() utilizando el método de fragmento setHasOptionsMenu(true);

Cuando se carga el fragmento usted conseguirá llamar al onCreateOptionsMenu(Menu menu, MenuInflater inflater) al igual que en una actividad. Luego haga los cambios necesarios en su menú.

Guarde su menú como global en fragmento, y cada vez que quiera hacer un cambio, aplique en él.

+1

Esta es, de lejos, la respuesta más correcta. –

1

No estoy seguro si una instancia Barra de acciones podría ayudar con el menú, pero sin duda sería útil .. Aquí está una manera de obtener de ella

Prueba esto para obtener la Barra de acciones de la FragmentActivity utilizando la (actividad Actividad) onAttach método en el Fragmento.

En primer lugar hacer un objeto global de la FragmentActivity en el fragmento como este

public class YourFragment extends Fragment { 

    private YourFragmentActivity context; 
} 

anular esta en la clase YourFragment

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

Luego, en el método OnCreate en el YourFragment hacer esto

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

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

    ... 
} 
Cuestiones relacionadas