Я ищу способ установить видимость 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(); }