2

I have a ViewPager, and I move between fragments using a switch and case. I can change the title per position, but I would also like to change the background colour per position.

public PagerTabStrip titleStrip;
    titleStrip.setBackgroundColor(Color.DKGRAY);

Using this in my onCreateView sets a permanent background colour. The idea I had was to use the titleStrip.setBackgroundColor(Color.DKGRAY); where I switch the fragments or change the title. But it doesn't work properly. Sometimes the colour changes, sometimes it doesn't, sometimes it changes in the wrong fragment.

This is the code where I switch fragments:

@Override
    public Fragment getItem(int position) { 

        switch (position) {

        case 0:  titleStrip.setBackgroundColor(Color.DKGRAY); // These
                 titleStrip.setTextColor(Color.WHITE); // This doesn't work either

            return new Fragment0();

        case 1:
            return new Fragment1();
        case 2:
            return new Fragment3();
        }
        return null;
    }
  • Why not change directly the background of your fragments ? – An-droid Jul 24 '13 at 12:13
  • @Yume117 Because I only want to change the colour of the PagerTabStrip. The background of the fragment should be eg. White, but the PagerTabStrip background should be eg. Blue –  Jul 24 '13 at 12:24

1 Answers1

4

First, make suer you have got the titleStrip when createView:

titleStrip = (PagerTabStrip) pagerView.findViewById(R.id.pager_title_strip);

then, you can add OnPageChangeListener to ViewPager, you can do anything you want in onPageSelected method:

mPager.setOnPageChangeListener(new OnPageChangeListener() {

    @Override
    public void onPageSelected(int position) {
        switch (position) {
        case 0:
            titleStrip.setBackgroundColor(Color.BLUE);
            break;

        case 1:
            titleStrip.setBackgroundColor(Color.GRAY);
            break;
        }
    }

    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
    }

    @Override
    public void onPageScrollStateChanged(int state) {
    }
});
srain
  • 8,944
  • 6
  • 30
  • 42