【发布时间】:2019-09-02 09:29:10
【问题描述】:
我正在编写一个带有自定义日历的应用程序,并且我正在尝试添加上个月和下个月的按钮。问题是,当我使用calendar.add(Calendar.MONTH, 1); 时,它增加了 2 个月而不是 1。当我写 calendar.add(Calendar.MONTH, -1); 时,它甚至更奇怪,因为它增加了 3 天,然后它就完全停止工作了。
我尝试了calendar.set(Calendar.MONTH, month + 1);,它在几个月内都能正常工作,但它混合了几年。例如。当它是 2019 年 12 月时,下个月是 2021 年 1 月。当我减少月份时,情况会更糟,因为当它是 11 月时,它会增加一年。我补充说:
if(calendar.get(Calendar.MONTH) == Calendar.JANUARY){
calendar.set(Calendar.YEAR, year + 1);
}
然后下一个按钮可以正常工作。我也用上一个按钮尝试过:
if(calendar.get(Calendar.MONTH) == Calendar.DECEMBER){
calendar.set(Calendar.YEAR, year - 1);
}
但它仍然在 11 月增加了一年。但是,当我在此代码中将 12 月更改为 11 月时,它会减去一年,例如,当它是 2019 年 12 月时,下个月是 2018 年 11 月,它也是不正确的。有任何想法吗?
private void setPreviousButtonClickEvent() {
layout.bringToFront();
previousButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
calendar.set(Calendar.DAY_OF_MONTH, day);
calendar.set(Calendar.MONTH, month - 1);
if(calendar.get(Calendar.MONTH) == Calendar.DECEMBER){
calendar.set(Calendar.YEAR, year - 1);
}
fillTheCalendar();
}
});
}
private void setNextButtonClickEvent() {
layout.bringToFront();
nextButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
calendar.set(Calendar.DAY_OF_MONTH, day);
calendar.set(Calendar.MONTH, month + 1);
if(calendar.get(Calendar.MONTH) == Calendar.JANUARY){
calendar.set(Calendar.YEAR, year + 1);
}
fillTheCalendar();
}
});
}
private void fillTheCalendar() {
views = new ArrayList<CalendarViews>();
calendar = (Calendar) calendar.clone();
@SuppressLint("SimpleDateFormat") SimpleDateFormat sdf = new SimpleDateFormat("dd MMMM, yyyy");
long currentDate = calendar.getTimeInMillis();
String todaysDate = sdf.format(currentDate);
date.setText(todaysDate);
// determine the cell for current month's beginning
year = calendar.get(Calendar.YEAR);
day = calendar.get(Calendar.DAY_OF_MONTH);
calendar.set(Calendar.DAY_OF_MONTH, 1);
month = calendar.get(Calendar.MONTH);
calendar.set(Calendar.MONTH, month);
int monthBeginningCell = calendar.get(Calendar.DAY_OF_WEEK) - 2;
// move calendar backwards to the beginning of the week
calendar.add(Calendar.DAY_OF_MONTH, -monthBeginningCell);
while (views.size() < DAYS_COUNT) {
dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
views.add(new CalendarViews(calendar.getTime(), dayOfMonth, 0, "event"));
calendar.add(Calendar.DAY_OF_MONTH, 1);
}
final CalendarAdapter adapter = new CalendarAdapter(getContext(), views);
gridView.setAdapter(adapter);
}
【问题讨论】:
-
我这样修复了上一个按钮: if(calendar.get(Calendar.MONTH) == Calendar.NOVEMBER){ calendar.set(Calendar.YEAR, year);它工作正常,但我不明白为什么会这样。