【发布时间】:2012-10-24 11:33:41
【问题描述】:
在我的活动中,我使用 ViewPager 向左/向右滑动并相应地显示月视图。我将月份和年份值从 onCreate 传递给 PagerAdapter:
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);
日历从 11 月开始,然后滚动到 1 月。我希望日历向前和向后显示无限的视图。
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;
}
基于Jon Willis' code,这是我想出来的,但是当viewpager的位置为0或2时,页面变为空白,然后显示下个月+1(即我滚动一月后, 页面闪烁并显示 March)。它滚动不流畅。我不知道该怎么做。
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);
}
【问题讨论】:
-
我以为我们已经解决了这个问题。如果你能给我完整的项目文件夹,我会为你工作。你已经为此支付了我一次赏金。在使用 Google Drive 之前,我已经发布了完整的项目文件夹。我将其压缩,上传到谷歌驱动器,将其标记为公开,然后在此处发布指向它的链接。也就是说,如果您不介意让所有代码可用。
-
嗨@JasonHessley,如果你能帮我解决这个问题,真的很感激。
标签: android calendar android-viewpager infinite