Как установить видимость элемента ActionBar в другом фрагменте

Я ищу способ установить видимость MenuItem завышенного в моей MainActivity, в зависимости от того, в каком Fragment я включен.

Для информации: Я использую actionBarSherlock , zxing и некоторые google services .

Приложение было создано с помощью навигационного ящика (с абс), также я манипулирую FragmentStack таким образом, что каждый раз, когда я переключаюсь на другой фрагмент, когда я нажимаю на сенсорный экран, я возвращаюсь в свой Main Fragment .

Здесь мое меню:

 <menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/button_generator" android:title="GENERER" android:icon="@drawable/ic_drawer"></item> </menu> 

Здесь я раздуваю меню:

  @Override public boolean onCreateOptionsMenu(Menu menu) { Log.d(TAG, "================= onCreateOptionsMenu ================= fragSt: " + fragmentStatus); this.getSherlock().getMenuInflater().inflate(R.menu.main, menu); mGenQrFromContacts = menu.findItem(R.id.button_generator); return true; } 

Я пробовал решение, предложенное здесь , но не работает в моем случае.

Вы должны попробовать это в своем Fragment :

 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // ... // call the method setHasOptionsMenu, to have access to the menu from your fragment setHasOptionsMenu(true); //... } // the create options menu with a MenuInflater to have the menu from your fragment @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { menu.findItem(R.id.button_generator).setVisible(true); super.onCreateOptionsMenu(menu, inflater); } 

И это, в вашей Activity :

 @Override public boolean onCreateOptionsMenu(Menu menu) { getSupportMenuInflater().inflate(R.menu.my_layout, menu); menu.findItem(R.id.button_generator).setVisible(false); return true; } 

Надеюсь это поможет.

Если вы хотите изменить фрагмент, вам нужно будет установить флаг, указывающий, какое меню вы хотите раздуть, тогда все, что вам нужно сделать, это вызвать invalidateOptionsMenu() в вашей активности, чтобы снова вызвать onCreateOptonsMenu и с помощью вашего флага вы настроили раздувание другого меню

Я нашел трюк, вы можете попробовать это.

 public void displayMenu(boolean show) { setHasOptionsMenu(show); getActivity().invalidateOptionsMenu(); }