user3421261
user3421261

Reputation: 183

Swipe view with different actionbar items in each swipe fragment

I want to change the actionbar items on each swipe fragment. Actually I want submit button on actionbar for only third swipe fragment. For example I have 3 fragment in swipe "all,urgent,new" and I only want submit button on "new" fragment. I tried some code. here is it:

public boolean onCreateOptionsMenu(Menu menu)
{
// add your refresh button to res/menu/main.xml
getMenuInflater().inflate(R.menu.main, menu);
mRefreshMenuItem = menu.findItem(R.id.action_submit);

return true;
}

And on Page selected I done so. But It is not working perfectly.

  @Override
     public void onPageSelected(int position) {

       actionBar.setSelectedNavigationItem(position);
       if(TabItem.equal("ALL"){
        mRefreshMenuItem.setVisible(false);
       }if(TabItem.equals("URGENT")){
        mRefreshMenuItem.setVisible(true);
        }if(TabItem.equals("NEW")){
        mRefreshMenuItem.setVisible(false);
        }

     }

Upvotes: 3

Views: 744

Answers (1)

ILovemyPoncho
ILovemyPoncho

Reputation: 2792

In your viewpager container (Activity or Fragment), add the next line in your page change listener:

invalidateOptionsMenu();
supportInvalidateOptionsMenu();//if using the actionbar support library
getActivity().invalidateOptionsMenu();//if your viewpager container is a fragment

it would be something like this:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ...
    yourViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
        @Override
        public void onPageSelected(int position) {
            invalidateOptionsMenu();
        }
    });
}

Then create your onCreateOptionsMenu(). The menu layout is going to have all the different icons you want to show:

    @Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);
    inflater.inflate(R.menu.your_menu_layout, menu);

}

The onPrepareOptionsMenu() callback method is called before the menu is shown, and we are going to use it to make the menu items visible depending on the current fragment:

    @Override
public boolean onPrepareOptionsMenu(Menu menu) {
    super.onPrepareOptionsMenu(menu);
    int page = yourViewPager.getCurrentItem();
    switch(page) {
        case 0:
            menu.findItem(R.id.item_f1).setVisible(true);
            menu.findItem(R.id.item_f2).setVisible(false);
            menu.findItem(R.id.item_f3).setVisible(false);
            break;
        case 1:
            menu.findItem(R.id.item_f1).setVisible(false);
            menu.findItem(R.id.item_f2).setVisible(true);
            menu.findItem(R.id.item_f3).setVisible(false);
            break;
        case 2:
            menu.findItem(R.id.item_f1).setVisible(false);
            menu.findItem(R.id.item_f2).setVisible(false);
            menu.findItem(R.id.item_f3).setVisible(true);
            break;  
    }
    return true;
}

and that's it.

If your viewpager container is a fragment, add setHasOptionsMenu(true), if it is an activity is not necessary.

Upvotes: 2

Related Questions