I've got three fragments in a viewpager.
Two of these fragments have their own version of the onCreateOptionsMenu method:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
// Set up 1 action button
inflater.inflate(R.menu.home_snapshot_add, menu);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
// Set up 2 action buttons
inflater.inflate(R.menu.home_snapshot_send, menu);
}
The home activity has a basic onCreateOptionsMenu method:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
return false;
}
In the onCreate method, each fragment calls the method:
setHasOptionsMenu(true);
Each of the menu items have the tag:
android:showAsAction="always"
Seems like as I open the Activity, all three buttons appear. However, when I scroll through them, the wrong ones magically disappear. It feels like the activity is calling every Fragment's options menu on Activity creation and then changes the menu appropriately when I swipe left and right. I've checked the menus but not sure what's wrong. Anything you reckon I need to check? I'm a little out of ideas.
Thanks!
OnPageChangeListener
is deprecated withaddOnChangeListener
.So try to use
I've used this and it has worked for me:
In your
ViewPager
'sOnPageChangeListener
and after setting the adapter to theViewPager
, have this:After setting your fragment adapter call the same method with following argument:
The above statements will prevent all other fragments not to receive call on
onCreateOptionsMenu()
method wheninvalidateOptionsMenu()
is called, only the currently visible fragment will receive and be able to populate the options menu.