In meiner Aktivität wische ich mit ViewPager nach links/rechts und zeige die Monatsansicht entsprechend an. Ich bin vorbei an den Monat und das Jahr Werte von onCreate
zum PagerAdapter:Kalender und PagerAdapter - unbegrenzte Ansichten
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);
Der Kalender von November beginnt und rollt dann bis Januar. Ich möchte, dass der Kalender unbegrenzte Ansichten vorwärts und rückwärts anzeigt.
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;
}
Basierend auf Jon Willis' code, das ist, was ich mit oben kommen, aber wenn die Position des viewpager 0 oder 2 ist, die Seite wird leer und zeigt dann im nächsten Monat + 1 (das heißt, nachdem ich im Januar geblättert habe, flackert die Seite und zeigt March an). Es scrollt nicht reibungslos. Ich bin mir nicht sicher, wie ich das sonst tun soll.
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);
}
Ich dachte, wir haben das schon gelöst. Wenn du mir deinen kompletten Projektordner besorgen kannst, werde ich das für dich arbeiten lassen. Du hast mir dafür schon einmal eine Prämie gezahlt. Ich habe komplette Projektordner veröffentlicht, bevor ich Google Drive verwende. Ich zip es, laden Sie es auf Google Drive, markieren Sie es als öffentlich, dann veröffentlichen Sie einen Link hier. Das ist, wenn es Ihnen nichts ausmacht, all Ihren Code verfügbar zu machen. –
Hallo @JasonHessley, wirklich zu schätzen, wenn Sie mir auf diesem einen helfen könnten. – input