2012-08-09 15 views
11

Tengo un fragmento con que se necesita para construir su propia barra de acción:invalidateOptionsMenu imposible encontrar llamado desde fragmento

public class CalendarFragment extends Fragment { 

public CalendarFragment() { 
} 

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    getActivity().supportInvalidateOptionsMenu(); 
    setHasOptionsMenu(true); 
} 

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    inflater.inflate(R.menu.calendar_menu1, menu); 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    return super.onOptionsItemSelected(item); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    TextView textView = new TextView(getActivity()); 
    textView.setGravity(Gravity.CENTER); 
    textView.setText("Calendar Fragment"); 
    return textView; 
} 

}

el problema es que doesnt crear un nuevo menú con artículos de calendar_menu1 pero sólo añade los elementos de menú a la edad, como si no funciona invalidateOptionsMenu (i trató getActivity(). invalidateOptionsMenu() también)

+1

lo antiguo menú, ¿seguro que no tiene una onCreateOptionsMenu en su actividad también? – Necronet

+0

¿A qué se refiere exactamente con ** nuevo menú **? Un menú sin elementos excepto los que acaba de crear. –

Respuesta

3

es normal, mirando hacia el javadoc de la MenuInflater, "los elementos y sub menús se añadirán a este menú ":

public void inflate (int menuRes, Menu menu) 
Inflate a menu hierarchy from the specified XML resource. Throws InflateException if there is an error. 

Parameters 
menuRes Resource ID for an XML layout resource to load (e.g., R.menu.main_activity) 
menu The Menu to inflate into. The items and submenus will be added to this Menu. 

¿trató de llamar a menu.clear() antes de inflar su menú fragmento?

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    menu.clear(); 
    inflater.inflate(R.menu.calendar_menu1, menu); 
} 
5

Debe llamar en onCreate():

setHasOptionsMenu(true); 
Cuestiones relacionadas