Setting action bar title in ViewPager

ぐ巨炮叔叔 提交于 2019-12-07 11:36:35

问题


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;
        }       
    }
}

回答1:


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

                            }
                        });



回答2:


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:


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]);
        }



回答4:


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 ;
        // ...
    }
}



回答5:


remove line from all places

getSupportActionBar().setTitle("XYZ");

from you source.

return title from getPageTitle method only.



来源:https://stackoverflow.com/questions/29847194/setting-action-bar-title-in-viewpager

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!