2013-03-27 5 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); 

    } 

Я пытаюсь загрузить мое меню фрагментарна и его получения loaed, но onPrepareOptionsMenu не вызывался на всех, где мне нужно, чтобы скрыть некоторые меню-пункты.не onPrepareOptionsMenu вызывалось в осколках

Update:

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

Я зову setHasOptionsMenu(true) внутри моего onCreate() метода.

+0

Спасибо, у меня была такая же проблема, но, как вы говорите, добавление вызова setHasOptionsMenu (true) в фрагменты onCreate исправил его. –

ответ

18

В Android 3.0 и выше меню опций считается всегда открытым, когда пункты меню представлены в панели действий. Когда происходит событие и вы хотите выполнить обновление меню, вы должны вызвать invalidateOptionsMenu(), чтобы запросить системный вызов onPrepareOptionsMenu().

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

Для изменения конкретного использования элемента: menu.findItem(R.id.your_item_id)

5

Вероятно, слишком поздно, но у меня была такая же проблема, и решение было очень простым. Просто позвоните getActivity(). InvalidateOptionsMenu() из вашего фрагмента. Это вызовет функциюPrepareOptionsMenu, и здесь вы сможете контролировать видимость ваших товаров следующим образом: menu.findItem (R.id.youritem) .setVisible (true/false); Надеюсь, что это поможет!

0

Это работает для меня.

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

Вам нужно сделать две вещи. Шаг 1: В фрагменте OnCreateView добавьте 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); 
} 

Шаг 2: вам необходимо добавить getActivity(). InvalidateOptionsMenu(); в вашем фрагменте в OnViewCreated. Или в mainActivity, когда вы меняете фрагмент.

Смежные вопросы