Customize the action bar name in ViewPager

My ViewPager consists of many fragments. I am showing the fragment title inside the actionBar, and I am using the code below to set the title. Since the ViewPager also triggers adjacent fragments, I see the title of the next fragment in the action bar. What should be the correct way to continue setting the title in the viewpager action bar?

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;
        }       
    }
}
+4
source share
5 answers

Try it...

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

                            }
                        });
+6
source

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) {

    }
});
+3
source

, , onPageScrolled :

public void onPageScrolled(int position, float positionOffset,
int positionOffsetPixels) {
            getSupportActionBar().setTitle(titles[position]);
        }
+1

getItem() , Fragment, , , .

ViewPager.OnPageChangeListener:

@Override
public void onPageSelected(final int position) {
    switch (position) {
        case 0:
            getSupportActionBar().setTitle("HomeFragment");
            break ;
        // ...
    }
}
0

getSupportActionBar().setTitle("XYZ");

.

getPageTitle.

0

Source: https://habr.com/ru/post/1584479/


All Articles