Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android: How to recreate Action bar when fragment changed

Tags:

I have an activity showing a few fragments. Activity view contains only ViewPager initialized with custom FragmentPagerAdapter. This adapter provide navigation among 3 fragments.

All seems to work fine except Action bar.

I override onCreateOptionsMenu() method in my fragments to create individual Action bar for any fragment:

     @Override     public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)     {         super.onCreateOptionsMenu(menu, inflater);         menu.clear();          //fragment specific menu creation     } 

When I do swipe, new fragment appears, but Action bar stay the same for a few seconds. Probably after a few seconds this method are called and Action bar get changed.

This looks pretty bad when action bar are changed in a while after swipe is finished. How can I recreate action bar immediately, before swipe begin?

like image 574
mc.dev Avatar asked Jan 23 '13 12:01

mc.dev


2 Answers

You can ask android to re-create the actionbar before it automatically does by calling invalidateOptionsMenu();

Do this somewhere close to the point where you change fragments to try and decrease the 'lag' between the fragment and actionbar changing.

Edit

a complete solution may look like this:

class activity extends Activity{  private void switchFragment(){  ...do fragment changing stuff  activity.invalidateOptionsMenu();  }  }  class someFragment extends Fragment{  @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {     super.onCreateOptionsMenu(menu, inflater);     menu.clear();       //fragment specific menu creation }  } 

whichever fragment is open during the

activity.invalidateOptionsMenu(); 

will then call its

 onCreateOptionsMenu 

and you can do fragment specific menu creation in there

like image 192
roarster Avatar answered Oct 04 '22 21:10

roarster


It can be done by implementing onCreateOptionsMenu and calling setHasOptionsMenu(true) in the onAttach callback in each fragment and change the actions accordingly.

To show the fragment without any actions setHasOptionsMenu(false) in it

like image 26
Kumait Avatar answered Oct 04 '22 21:10

Kumait