W mojej działalności używam ViewPager, aby przesuwać w lewo/w prawo i wyświetlać widok miesiąca. Ja przechodząc miesiąc i rok wartości od onCreate
do PagerAdapter:Kalendarz i PagerAdapter - nieograniczona liczba wyświetleń
private static int NUM_AWESOME_VIEWS = 3;
viewPager = (ViewPager) v.findViewById(R.id.pager);
cAdapter = new CalendarPagerAdapter(this.getActivity().getApplicationContext(), date_value, fragmentManager, month, year);
viewPager.setAdapter(cAdapter);
viewPager.setOffscreenPageLimit(3);
Kalendarz zaczyna się od listopada, a następnie przewija do stycznia. Chciałbym, aby Kalendarz wyświetlał nieograniczoną liczbę wyświetleń do przodu i do tyłu.
PagerAdapter:
public CalendarPagerAdapter(Context context, int dv, FragmentManager fm, int month, int year){
this.context = context;
this.dv = dv;
this.fm = fm;
this.month = month;
this.year = year;
}
public Object instantiateItem(View collection, int position) {
Log.d("Object", "Instantiated");
LayoutInflater inflater = (LayoutInflater) collection.getContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = inflater.inflate(R.layout.simple_calendar_view, null);
_calendar.set(Calendar.MONTH, month);
_calendar.set(Calendar.YEAR, year);
month = _calendar.get(Calendar.MONTH) + 1;
year = _calendar.get(Calendar.YEAR);
currentMonth = (Button) v.findViewById(R.id.currentMonth);
currentMonth.setText(hijri.getMonthForInt(month-1).toUpperCase() + " " + year);
calendarView = (GridView) v.findViewById(R.id.calendar);
calendarWeek = (GridView) v.findViewById(R.id.calendarweek);
calendarWeek.setAdapter(new CalendarWeekAdapter(context, firstDay));
// Initialised
adapter = new GridCellAdapter(calendarView, context, R.id.calendar_day_gridcell, month, year, 0, 0, 0);
adapter.notifyDataSetChanged();
calendarView.setAdapter(adapter);
((ViewPager) collection).addView(v, 0);
return v;
}
podstawie Jon Willis' code, to co mam wymyślić, ale gdy pozycja viewpager jest 0 lub 2, strona gaśnie, a następnie wyświetla następny miesiąc + 1 (czyli po przewinięciu stycznia strona migocze i wyświetla marzec). Nie przewija się płynnie. Nie wiem, jak inaczej to zrobić.
viewPager.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageScrollStateChanged(int state) {
if (state == ViewPager.SCROLL_STATE_IDLE)
Log.d("Calendar ViewPager", "Calendar ViewPager" + viewPager.getCurrentItem());
if (focusedPage == 0) {
_calendar.add(Calendar.MONTH, -1);
month = _calendar.get(Calendar.MONTH);
year = _calendar.get(Calendar.YEAR);
setGridCellAdapter(context, month, year);
} else if (focusedPage == 2) {
_calendar.add(Calendar.MONTH, +1);
month = _calendar.get(Calendar.MONTH);
year = _calendar.get(Calendar.YEAR);
setGridCellAdapter(context, month, year);
}
viewPager.setCurrentItem(1, false);
}
}
@Override
public void onPageSelected(int position) {
focusedPage = position;
}
});
public void setGridCellAdapter(Context ctx, int month, int year)
{
cAdapter = new CalendarPagerAdapter(ctx, date_value, fragmentManager, month, year);
Log.d("Object", "Re-instantiatted" + month + year);
cAdapter.notifyDataSetChanged();
viewPager.setAdapter(cAdapter);
}
Myślałem, że już to rozwiązaliśmy. Jeśli zdobędziesz swój pełny folder projektu, zrobię to za Ciebie. Już raz zapłaciłeś mi za to nagrodę. Przed użyciem mojego Dysku Google opublikowaliśmy pełne foldery projektów. Zapakowuję go, umieszczam na dysku google, oznaczam jako publiczny, a następnie umieszczam link do niego tutaj. To znaczy, jeśli nie masz nic przeciwko udostępnieniu całego twojego kodu. –
Witam @JasonHessley, naprawdę doceniam, jeśli możesz mi pomóc w tej sprawie. – input