Настройка названия панели действий в ViewPager

Мой ViewPager состоит из множества фрагментов. Я показываю заголовок фрагмента внутри actionBar, и я использую ниже код для установки заголовка. Поскольку ViewPager также инициирует смежные фрагменты, я вижу в панели действий заголовок следующего фрагмента. Каким должен быть правильный способ продолжения В настройке заголовка в панели действий 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; } } 

Обновлено в соответствии с ответом shkschneider

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

Попробуй это …..

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

Попробуйте этот код:

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

getItem() вызывается каждый раз, когда ваше приложение хочет отобразить Fragment , поэтому, конечно, заголовок отображает следующий.

Вместо этого вы должны использовать ViewPager.OnPageChangeListener :

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

Удалить строку со всех мест

 getSupportActionBar().setTitle("XYZ"); 

От вас источник.

Return title только из метода getPageTitle .

Вы можете создать массив строк заголовков, а затем установить прослушиватель страниц на пейджере просмотра, а внутри onPageScrolled сделать вот так:

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