This is a variant on a familiar problem (such as this: Setting action bar title in ViewPager)
I have a ViewPager setup in my main activity. The ViewPager is set to represent a date. I've set it up with an OnPageChangeListener
and onPageListener
to set the toolbar title to a given date (the default on startup being the current date). onPageListener
is called, but some other event is called afterwards, and it sets the toolbar title back to the defined app name. Even setting it explicitly in the activity's onCreate
doesn't fix the title, it is still replaced by the app name.
public class MainActivity extends AppCompatActivity {
private Toolbar toolbar;
private Date _displayedDate;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
final ViewPager viewPager = (ViewPager) findViewById(R.id.viewPager);
viewPager.setAdapter(new DatePagerAdapter(getSupportFragmentManager()));
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
_displayedDate = DateUtils.offsetDate(position);
showDisplayedDate(); // no apparent effect
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
_displayedDate = new Date();
viewPager.setCurrentItem((int)DateUtils.getDayOffset(_displayedDate));
showDisplayedDate(); // no apparent effect
}
public void showDisplayedDate() {
if (_displayedDate != null) {
toolbar.setTitle(_displayedDate.toString())); // simplified version of date display
}
}
}
public class DatePagerAdapter extends FragmentStatePagerAdapter
So, what gives? How do I set the title based on the ViewPager's initial display?