android - personalizar - ¿Cómo puedo establecer la visibilidad de un elemento ActionBar en un fragmento diferente?
navigation drawer con fragments android studio (3)
Estoy buscando una manera de establecer la visibilidad de un elemento de MenuItem
inflado en mi actividad principal dependiendo de en qué Fragment
estoy.
Para información: estoy usando actionBarSherlock
, zxing
y algunos google services
.
La aplicación fue construida con un cajón de navegación (con abs), también manipulo el FragmentStack
de tal manera que cada vez que cambio a otro Fragmento cuando presiono el botón de volver, vuelvo en mi Main Fragment
.
Aquí mi menú:
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@+id/button_generator" android:title="GENERER" android:icon="@drawable/ic_drawer"></item>
</menu>
Aquí es donde infló el menú:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
Log.d(TAG, "================= onCreateOptionsMenu ================= fragSt: " + fragmentStatus);
this.getSherlock().getMenuInflater().inflate(R.menu.main, menu);
mGenQrFromContacts = menu.findItem(R.id.button_generator);
return true;
}
He intentado la solución aquí , pero no funciona en mi caso.
Cuando quieras cambiar el fragmento necesitarás establecer un indicador que indique qué menú deseas inflar, entonces todo lo que tienes que hacer es llamar a invalidateOptionsMenu()
en tu actividad para llamar nuevamente a onCreateOptonsMenu
y usando tu onCreateOptonsMenu
puedes configurarlo para inflar un menú diferente
Deberías probar esto en tu Fragment
:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// ...
// call the method setHasOptionsMenu, to have access to the menu from your fragment
setHasOptionsMenu(true);
//...
}
// the create options menu with a MenuInflater to have the menu from your fragment
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
menu.findItem(R.id.button_generator).setVisible(true);
super.onCreateOptionsMenu(menu, inflater);
}
Y esto, en tu Activity
:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getSupportMenuInflater().inflate(R.menu.my_layout, menu);
menu.findItem(R.id.button_generator).setVisible(false);
return true;
}
Espero que esto ayude.
Encontré un truco, tal vez quieras probar esto.
public void displayMenu(boolean show) {
setHasOptionsMenu(show);
getActivity().invalidateOptionsMenu();
}