I am trying to do something simple. But i don't know why it doesn't work. I'm just want to change the toolbar
title to match the fragment on tab changes. But somehow it will get the wrong value. Like when i choose A it will set the title B. And sometimes the title won't changes at all. How can i do this? Thank you.
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dashboard);
toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
DrawerLayout drawer = findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.addDrawerListener(toggle);
toggle.syncState();
mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
mViewPager = findViewById(R.id.viewpager);
mViewPager.setAdapter(mSectionsPagerAdapter);
TabLayout tabLayout = findViewById(R.id.tabs);
mViewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
tabLayout.addOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(mViewPager));
navigationView = findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
}
public class SectionsPagerAdapter extends FragmentPagerAdapter {
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
switch (position){
case 0:
//toolbar.setTitle(R.string.home);
FragmentMainHome fragmentMainHome = new FragmentMainHome();
return fragmentMainHome;
case 1:
//toolbar.setTitle(R.string.activities);
FragmentMainActivities fragmentMainActivities = new FragmentMainActivities();
return fragmentMainActivities;
case 2:
//toolbar.setTitle(R.string.people);
FragmentMainPeople fragmentMainPeople = new FragmentMainPeople();
return fragmentMainPeople;
case 3:
//toolbar.setTitle(R.string.posts);
FragmentMainPosts fragmentMainPosts = new FragmentMainPosts();
return fragmentMainPosts;
case 4:
//toolbar.setTitle(R.string.media);
FragmentMainMedia fragmentMainMedia = new FragmentMainMedia();
return fragmentMainMedia;
}
return null;
}
@Override
public int getCount() {
// Show total pages.
return 5;
}
}
Use addOnPageChangeListener
:
mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}
@Override
public void onPageSelected(int position) {
switch (position) {
case 0:
toolbar.setTitle(R.string.home);
break;
case 1:
toolbar.setTitle(R.string.activities);
break;
case 2:
toolbar.setTitle(R.string.people);
break;
case 3:
toolbar.setTitle(R.string.posts);
break;
case 4:
toolbar.setTitle(R.string.media);
break;
}
}
@Override
public void onPageScrollStateChanged(int state) {}
});