2012-08-09 10 views
11

Ho un frammento con che ha la necessità di costruire una propria barra di azione:invalidateOptionsMenu non ottiene chiamato dal frammento

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

}

il problema è che pretende molto creare un nuovo menu con elementi da calendar_menu1 ma solo aggiunge gli elementi da esso al vecchio menù, come se invalidateOptionsMenu non funziona (ho provato getActivity(). invalidateOptionsMenu() troppo)

+1

quello vecchio menu, sei sicuro che non si dispone di un onCreateOptionsMenu nella vostra attività troppo? – Necronet

+0

Cosa intendi esattamente per ** nuovo menu **? Un menu senza elementi tranne quelli che hai appena creato? –

risposta

3

e 'normale, esaminando la javadoc del MenuInflater, "le voci e sub i menu saranno aggiunti a questo Menu ":

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. 

Hai provato a chiamare menu.clear() prima di gonfiare il vostro menu frammento?

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

È necessario chiamare in onCreate():

setHasOptionsMenu(true); 
Problemi correlati