Это вариант на знакомой проблеме (например, это: Setting action bar title in ViewPager)Установка начального заголовка панели инструментов, основанный на ViewPager при запуске
У меня есть настройки ViewPager в моей основной деятельности. ViewPager установлен для представления даты. Я установил его с помощью OnPageChangeListener
и onPageListener
, чтобы установить заголовок панели инструментов на заданную дату (по умолчанию при запуске будет текущая дата). onPageListener
вызывается, но некоторое другое событие вызывается потом, и он устанавливает заголовок панели инструментов назад в указанное имя приложения. Даже если установить его явно в onCreate
, это не исправляет заголовок, он по-прежнему заменяется именем приложения.
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
Итак, что дает? Как установить заголовок на основе начального отображения ViewPager?