5

My ViewPager consists of many fragments .I am displaying title of fragment inside actionBar and i am using below code to set title .Since the ViewPager also initiates adjacent fragments I see in actionbar the title of next fragment.What should be the correct way to proceed in setting the title in actionbar of viewpager?

private class MyPagerAdapter extends FragmentPagerAdapter {

    private String[] titles = {
            "Titleme", "Titletos", "Titleos", "Titles", "MeTitle5", "Title6",
            "Title7", "Title8"
    };

    public MyPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return titles[position];
    }

    @Override
    public android.support.v4.app.Fragment getItem(int pos) {
        Bundle args = new Bundle();

        switch (pos) {
            case 0:
                currentFragment = new HomeFragment();
                getSupportActionBar().setTitle("HomeFragment");
                break;
            case 1:
                currentFragment = new HomeFragment5();
                getSupportActionBar().setTitle("HomeFragment5");
                break;
            case 2:
                currentFragment = new HomeFragment4();
                getSupportActionBar().setTitle("HomeFragment4");
                break;
            case 3:
                currentFragment = new HomeFragment3();
                getSupportActionBar().setTitle("HomeFragment3");
                break;
            case 4:
                currentFragment = new HomeFragment4();
                getSupportActionBar().setTitle("HomeFragment4");
                break;
            case 5:
                currentFragment = new ChlHome();
                getSupportActionBar().setTitle("ChlHome");
                break;
            case 6:
                currentFragment = new GiFragment();
                getSupportActionBar().setTitle("GiFragment");
                break;
            case 7:
                currentFragment = new FlList();
                getSupportActionBar().setTitle(" FlList");
                break;
            default:
        }
        return currentFragment;
    }

    @Override
    public int getCount() {
        return 8;
    }       
}

Updated according to shkschneider answer

  final ViewPager pager = (ViewPager) findViewById(R.id.viewPager);
        pager.setAdapter(new MyPagerAdapter(getSupportFragmentManager()));
        PagerSlidingTabStrip tabs = (PagerSlidingTabStrip) findViewById(R.id.tabs);
        tabs.setViewPager(pager);
    pager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

        }

        @Override
        public void onPageSelected(int position) {
            pager.setCurrentItem(position);
            switch(position) {
                case 0:

                    getSupportActionBar().setTitle("H");
                    break;
                case 1:
                    getSupportActionBar().setTitle("P");
                    break;
                case 2:
                    getSupportActionBar().setTitle("A");
                    break;
                case 3:
                    getSupportActionBar().setTitle("V");
                    break;
                case 4:
                    getSupportActionBar().setTitle("M");
                    break;
                case 5:
                    getSupportActionBar().setTitle("C");
                    break;
                case 6:
                    getSupportActionBar().setTitle("G");
                    break;
                case 7:
                    getSupportActionBar().setTitle("F");
                    break;
            }

        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });


private class MyPagerAdapter extends FragmentPagerAdapter {

        private String[] titles = {
                "Titleme", "Titletos", "Titleos", "Titles", "MeTitle5", "Title6",
                "Title7", "Title8"
        };

        public MyPagerAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public CharSequence getPageTitle(int position) {
            return titles[position];
        }

        @Override
        public android.support.v4.app.Fragment getItem(int pos) {
            Bundle args = new Bundle();

            switch (pos) {
                case 0:
                    currentFragment = new HomeFragment();

                    break;
                case 1:
                    currentFragment = new HomeFragment5();

                    break;
                case 2:
                    currentFragment = new HomeFragment4();

                    break;
                case 3:
                    currentFragment = new HomeFragment3();

                    break;
                case 4:
                    currentFragment = new HomeFragment4();

                    break;
                case 5:
                    currentFragment = new ChlHome();

                    break;
                case 6:
                    currentFragment = new GiFragment();

                    break;
                case 7:
                    currentFragment = new FlList();

                    break;
                default:
            }
            return currentFragment;
        }

        @Override
        public int getCount() {
            return 8;
        }       
    }
}
Community
  • 1
  • 1

5 Answers5

6

Try this one .....

final ViewPager pager = (ViewPager) findViewById(R.id.viewPager);
            pager.setAdapter(new MyPagerAdapter(getSupportFragmentManager()));
            PagerSlidingTabStrip tabs = (PagerSlidingTabStrip) findViewById(R.id.tabs);

            tabs.setViewPager(pager);

           //Use tabs for setting listener
                tabs
                        .setOnPageChangeListener(new ViewPager.OnPageChangeListener() {

                            @Override
                            public void onPageSelected(int position) {
                                // TODO Auto-generated method stub
                                tabs.setNextFocusRightId(position);

                                 actionBar.setTitle(titles[pos]);
                            }

                            @Override
                            public void onPageScrolled(int arg0, float arg1, int arg2) {
                                // TODO Auto-generated method stub

                            }

                            @Override
                            public void onPageScrollStateChanged(int pos) {
                                // TODO Auto-generated method stub

                            }
                        });
Surender Kumar
  • 1,123
  • 8
  • 15
3

Try this code:

viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
    @Override
    public void onPageSelected(int pos) {
        actionBar.setSelectedNavigationItem(pos);
        actionBar.setTitle(titles[pos]);
    }

    @Override
    public void onPageScrolled(int arg0, float arg1, int arg2) {

    }

    @Override
    public void onPageScrollStateChanged(int arg0) {

    }
});
Ziem
  • 6,579
  • 8
  • 53
  • 86
Surender Kumar
  • 1,123
  • 8
  • 15
  • that worked..but i don't see the selection underline of tabs being changed on selection.it remains on first tab only...while previouly it was changing fine on page change –  Apr 24 '15 at 12:41
  • i am using pagerslidingtabstrip –  Apr 24 '15 at 12:53
  • How I have to use pagerstitlestrip?..glad if u can help me wid code or link –  Apr 25 '15 at 06:48
  • Check my new answer i posted how to use pagertitlestrip in place of viewpager. – Surender Kumar Apr 25 '15 at 13:43
2

You can make array of titles string then set page listener on view pager and inside onPageScrolled do like this:

public void onPageScrolled(int position, float positionOffset,
int positionOffsetPixels) {
            getSupportActionBar().setTitle(titles[position]);
        }
blackHawk
  • 6,047
  • 13
  • 57
  • 100
0

getItem() is called everytime your app wants to render a Fragment, so of course the title displays the next one.

Instead you should use ViewPager.OnPageChangeListener:

@Override
public void onPageSelected(final int position) {
    switch (position) {
        case 0:
            getSupportActionBar().setTitle("HomeFragment");
            break ;
        // ...
    }
}
shkschneider
  • 17,833
  • 13
  • 59
  • 112
  • that worked..but now i don't see the selection underline of tabs being changed on selection.it remains on first tab only...while previouly it was changing fine on page change –  Apr 24 '15 at 12:28
  • Hm, that is another problem, which needs more code about your `ViewPager` implementation, or to open another question. – shkschneider Apr 24 '15 at 12:30
  • it was working fine previouly ..only after i added ViewPager.OnPageChangeListener its not working... –  Apr 24 '15 at 12:34
  • I get it, but you only exposed your `MyPagerAdapter` code. And that problem comes from somewhere else that I cannot guess. – shkschneider Apr 24 '15 at 12:35
  • i am using pagerslidingtabstrip –  Apr 24 '15 at 12:52
  • @Bhuvi so? That does not tell me your code surrounding it... Come on please, I helped you, you got to post some code to fix your second issue. – shkschneider Apr 24 '15 at 12:54
0

remove line from all places

getSupportActionBar().setTitle("XYZ");

from you source.

return title from getPageTitle method only.

Imtiyaz Khalani
  • 2,037
  • 18
  • 32