2013-03-27 14 views
18
@Override 
    public void onCreateOptionsMenu(Menu menu,MenuInflater inflater){ 
     Log.d("Does", "get called"); 
     inflater.inflate(R.menu.menuItem, menu); 
     super.onCreateOptionsMenu(menu,inflater); 
    } 

    @Override 
    public void onPrepareOptionsMenu(Menu menu) { 
     super.onPrepareOptionsMenu(menu); 
     getActivity().invalidateOptionsMenu(); 
     MenuItem filter = menu.findItem(R.id.section); 

     filter.setVisible(false); 

    } 

Próbuję załadować moje menu we fragmentach i jego coraz loaed, ale onPrepareOptionsMenu nie jest uzyskiwanie nazywa w ogóle, gdy trzeba ukryć niektóre elementy menu.nie onPrepareOptionsMenu uzyskiwanie nazywany we fragmentach

Aktualizacja:

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

Wołam setHasOptionsMenu(true) wewnątrz mojej metody onCreate().

+0

Dzięki, miałem ten sam problem, ale jak mówisz, dodanie wywołania setHasOptionsMenu (true) w fragmentach onCreate naprawiło to. –

Odpowiedz

18

W systemie Android 3.0 i nowszym menu opcji jest zawsze otwarte, gdy elementy menu są wyświetlane na pasku akcji. Kiedy wystąpi zdarzenie i chcesz przeprowadzić aktualizację menu, musisz wywołać metodę invalidateOptionsMenu(), aby zażądać wywołania systemowego wPrepareOptionsMenu().

http://developer.android.com/guide/topics/ui/menus.html

Aby zmienić szczególne zastosowanie produktu: menu.findItem(R.id.your_item_id)

5

prawdopodobnie zbyt późno, ale miałem ten sam problem, a rozwiązanie było bardzo proste. Po prostu wywołaj funkcję getActivity(). InvalidateOptionsMenu() ze swojego fragmentu. To wywoła onPrepareOptionsMenu i tutaj możesz kontrolować widoczność swoich pozycji w następujący sposób: menu.findItem (R.id.youritem) .setVisible (true/false); Nadzieję, że pomaga!

0

To działa dla mnie.

public class ContentFragment extends android.support.v4.app.Fragment { 
    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     View v = inflater.inflate(R.layout.content_frame,container,false); 
     setHasOptionsMenu(true); 
     return v; 
    } 

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

Musisz zrobić dwie rzeczy. Krok 1: W Fragment OnCreateView dodaj setHasOptionsMenu (true);

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    setHasOptionsMenu(true); 
    return inflater.inflate(R.layout.fragment_user_settings, container, false); 
} 

Krok 2: należy dodać metodę getActivity(). InvalidateOptionsMenu(); w twoim fragmencie w OnViewCreated. Lub w mainActivity po zmianie Fragmentu.

Powiązane problemy