Я реализую FragmentStatePagerAdapter, который отлично работает, но getItem (int position) не имеет правильного значения все время.FragmentStatePagerAdapter.getItem() возвращает неправильную позицию
public class EventPagerAdapter extends FragmentStatePagerAdapter {
private static String LOG = "EVENTPAGER";
private Calendar currentDate;
public EventPagerAdapter(FragmentManager fm) {
super(fm);
currentDate = Calendar.getInstance();
}
public void setCurrentDate(Date date) {
currentDate.setTime(date);
}
@Override
public Fragment getItem(int i) {
Log.i(LOG, "item " + i);
// reset Date every time
currentDate.setTime(new Date());
SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMdd");
int days = (i > 50 ? i-50 : -50+i);
currentDate.add(Calendar.DATE, days);
String dateFormatted = fmt.format(currentDate.getTime());
Bundle args = new Bundle();
args.putString("calendarDate", dateFormatted);
Fragment fragment = new EventFragment();
fragment.setArguments(args);
return fragment;
}
@Override
public int getCount() {
return 100;
}
@Override
public CharSequence getPageTitle(int position) {
Log.i(LOG, "position " + position);
int days = 0;
days = (position > 49 ? position-49 : -49+position);
currentDate.setTime(new Date());
currentDate.add(Calendar.DATE, days);
SimpleDateFormat fmt = new SimpleDateFormat("E, d.MMM");
String dateFormatted = fmt.format(currentDate.getTime());
return dateFormatted;
}
Я хочу иметь 100 фрагментов, отображающих фрагмент 49 с текущей датой в качестве первого фрагмента. Прокрутка влево увеличивает дату на один день, прокручивание вправо уменьшит ее.
EventPagerAdapter eventPagerAdapter = new EventPagerAdapter(getSupportFragmentManager());
ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
viewPager.setAdapter(eventPagerAdapter);
viewPager.setCurrentItem(49);
Это прекрасно работает для getPageTitle()
метода, который имеет правильный индекс. Но getItem()
нет. Любая идея почему? Это происходит потому, что эти фрагменты кэшируются?