Trong hoạt động của tôi, tôi đang sử dụng ViewPager để vuốt sang trái/phải và hiển thị chế độ xem theo tháng cho phù hợp. Tôi đang đi qua các tháng, năm giá trị từ onCreate
đến PagerAdapter:Lịch và PagerAdapter - Số lần xem không giới hạn
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);
Calendar bắt đầu từ tháng mười một và sau đó cuộn đến tháng Giêng. Tôi muốn Lịch hiển thị các lượt xem không giới hạn về phía trước và phía sau.
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;
}
Dựa trên Jon Willis' code, đây là những gì tôi đã đưa ra, nhưng khi vị trí của ViewPager là 0 hoặc 2, trang trở nên trống rỗng và sau đó hiển thị vào tháng tới + 1 (tức là sau khi cuộn tháng 1, trang sẽ nhấp nháy và hiển thị tháng 3). Nó không di chuyển trơn tru. Tôi không chắc chắn làm thế nào để làm điều đó.
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);
}
Tôi nghĩ chúng tôi đã giải quyết vấn đề này rồi. Nếu bạn có thể đưa cho tôi thư mục dự án hoàn chỉnh của bạn, tôi sẽ làm việc này cho bạn. Bạn đã trả tiền cho tôi một khoản tiền thưởng một lần cho việc này. Tôi đã đăng các thư mục dự án hoàn chỉnh trước khi sử dụng Google Drive của mình. Tôi nén nó, tải nó lên ổ google, đánh dấu nó là công khai, sau đó đăng một liên kết đến nó ở đây. Đó là nếu bạn không nhớ làm cho tất cả các mã của bạn có sẵn. –
Xin chào @JasonHessley, thực sự đánh giá cao nếu bạn có thể giúp tôi về điều này. – input