onoptionsitemselected item from android android-fragments android-optionsmenu

android - item - oncreateoptionsmenu fragment



Ocultar MenuItem en algunos fragmentos (8)

Estoy usando un menú que tiene más Fragment . En algunos Fragment tengo el elemento de menú REFRESH, pero en algunos fragmentos quiero ocultar este elemento del menú (no quiero mostrar el menú, pero no quiero ocultar la ActionBar ).

Intento agregar omitir onCreateOptionsMenu() a Fragment donde no quiero mostrar este elemento de menú pero no puedo hacer que funcione. Intento de muchas maneras ver la línea comentada en el código. ¿Alguna idea de dónde está el problema? Y por último, este elemento del menú se esconde cuando activo el menú desplegable cuando se llama onPrepareOptionsMenu() en MainActivity, pero necesito hacerlo cuando estoy en Fragment .

Fragment donde quiero ocultar el elemento del menú REFRESH:

public class FindPeopleFragment extends Fragment { public FindPeopleFragment(){} @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_find_people, container, false); //setHasOptionsMenu(false); return rootView; } private Menu menu=null; @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.main, menu); this.menu=menu; menu.findItem(R.id.refresh).setVisible(false); getActivity().invalidateOptionsMenu(); //setHasOptionsMenu(false); super.onCreateOptionsMenu(menu,inflater); } }

MainActivity donde se define MENU DRAWER:

//Slide menu item click listener private class SlideMenuClickListener implements ListView.OnItemClickListener { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // display view for selected nav drawer item displayView(position); } } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // toggle nav drawer on selecting action bar app icon/title if (mDrawerToggle.onOptionsItemSelected(item)) { return true; } switch (item.getItemId()) { case R.id.refresh: Toast.makeText(this, "Refreshing data...", Toast.LENGTH_SHORT).show(); return true; } return super.onOptionsItemSelected(item); } // Called when invalidateOptionsMenu() is triggered @Override public boolean onPrepareOptionsMenu(Menu menu) { // if nav drawer is opened, hide the action items boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList); menu.findItem(R.id.refresh).setVisible(!drawerOpen); return super.onPrepareOptionsMenu(menu); }


Acabo de utilizar el código siguiente para ocultar menuitem en fragmnet donde no quiero usarlo. Nota: Por favor lea el comentario

@Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main, menu); Fragment whichFragment=getVisibleFragment();//getVisible method return current visible fragment String shareVisible=whichFragment.getClass().toString(); if(shareVisible.equals(AccFragment.class.toString()) ||shareVisible.equals(SocFragment.class.toString()) ||shareVisible.equals(DevFragment.class.toString()) ){ MenuItem item=menu.findItem(R.id.action_share); item.setVisible(false); } return super.onCreateOptionsMenu(menu); }


En el Fragment donde no quiere mostrar ninguna opción de menú, necesita setHasOptionsMenu(false); en onCreate() , así:

@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(false); }

Sin embargo, el menú que se muestra que desea ocultar (REFRESH) pertenece a MainActivity. Es por eso que siempre se muestra. Como desea controlar el menú en el nivel de Fragment (y no mostrar un menú de opciones de Activity ), mi sugerencia es eliminar el código de menú de la Activity e implementarlo en su Fragment .

Activity y los Fragment pueden tener sus propios menús por separado. Ver este link


En el fragmento donde quieres ocultar el elemento

@Override public void onPrepareOptionsMenu(Menu menu) { MenuItem item=menu.findItem(R.id.action_search); item.setVisible(false);

y en onCreate () de tu fragmento

setHasOptionsMenu(true);


Hay muchas versiones diferentes de soluciones similares, pero desafortunadamente, ninguna de ellas funcionó para mí. Estoy compartiendo lo que finalmente fue útil para mí para ocultar todo el menú de desbordamiento con múltiples elementos de menú. Pensé que tal vez sea útil para cualquiera.

Agrupé mis menús con una id y luego referí esa id

@Override public void onPrepareOptionsMenu(Menu menu) { menu.setGroupVisible(R.id.menu_overflow, false); super.onPrepareOptionsMenu(menu); }

Si desea ocultar un elemento de menú individual, puede usar

menu.getItem(R.id.action_licenses).setVisible(false);

Lo importante es que debe tener setOptionsMenu(true) en onViewCreated()

@Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); setHasOptionsMenu(true);


O resuélvelo en el mismo Fragmento que creó el menú, si aloja la barra de acciones en el nivel de actividad. De esta forma, no tiene que agregarlo en ningún otro Fragmento donde no desee mostrarlo:

public override void OnDestroy() { base.OnDestroy(); HasOptionsMenu = false; }


Simplemente encuentre el artículo que desea ocultar utilizando findItem luego configure su visibilidad en false .

@Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main, menu); MenuItem item = menu.findItem(R.id.action_settings); item.setVisible(false); }


por favor prueba esto

@Override public void onPrepareOptionsMenu(Menu menu) { menu.clear(); }

y pon esto en tu fragmen onCreate ()

setHasOptionsMenu(true);


En la clase de fragmento

@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); menu.clear(); }