我正在尝试实现setOnDateChangeListener,目的是选择两个日期值(minDate和maxDate),然后使用Intent将此值发送到另一个活动。我应该以某种方式存储选择的第一个日期(比如minDate),然后在第二次点击(maxDate)之后获取第一个值并将两者作为数组发送,或者还有其他方法可以在日历中选择两个日期吗?
calendar.setOnDateChangeListener(new OnDateChangeListener() {
@Override
public void onSelectedDayChange(CalendarView view, int year,
int month, int dayOfMonth) {
Toast.makeText(
getApplicationContext(),
dayOfMonth + "/" + month + "/" + year, Toast.LENGTH_LONG).show();
}
});
到目前为止我所拥有的是:
@Override
public void onSelectedDayChange(CalendarView view, int year,
int month, int dayOfMonth) {
Intent intent = new Intent(view.getContext(),
DisplayActivity.class);
String year_month_dayOfMonth = String.valueOf(year) + "-"
+ String.valueOf(month + 1) + "-"
+ String.valueOf(dayOfMonth);
intent.putExtra("date", year_month_dayOfMonth);
startActivity(intent);
}
});
因此,当我点击日历日期时,它会触发DisplayActivity,并且只会触发一个意图携带的日期。问题仍然存在,如何选择两个日期并将其置于意图之中。
经过深入搜索后,我得出结论,日历中的日期范围只能与DatePicker一起完成。因此,我选择date然后调用DatePicker对话框并使用数据进行操作。有人可以确认我的结论是否正确。
已经达到以下解决方案:
public void onSelectedDayChange(CalendarView view, int year,
int month, int dayOfMonth) {
int id = CalendarView.generateViewId();
if ((id % 2) == 0) {
end_date = calendar.getDate();
Log.d(LOG_TAG, "End date: " + end_date + "and id = " + id);
} else {
start_date = calendar.getDate();
Log.d(LOG_TAG, "Start date: " + start_date + "and id = "
+ id);
}
如果有人会分享更好的解决方案或样品会欣赏它。自Android开发新版以来,任何批评也绝对开放。
答案 0 :(得分:1)
Android原生CalendarView不支持此功能。你可以使用我的库。它调用MFCalendarView
你可以突出显示这样的多个事件;
ArrayList<String> eventDays = new ArrayList<String>();
eventDays.add("2014-02-25");
eventDays.add(Util.getCurrentDate());
mf.setEvents(eventDays);
MFCalendarView有自己的监听器:
mf = (MFCalendarView) findViewById(R.id.mFCalendarView);
mf.setOnCalendarViewListener(new onMFCalendarViewListener() {
@Override
public void onDisplayedMonthChanged(int month, int year, String monthStr) {
}
@Override
public void onDateChanged(String date) {
}
});
答案 1 :(得分:0)
经过仔细研究后我发现了CalendarView.generateViewId();不是一个好的解决方案,因为id被分配给整个应用程序生命周期。所以,我只是添加了两个按钮来获取最小和最大日期。不是优雅的解决方案,但没有在堆栈或其他任何地方找到任何其他。
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
date = calendar.getDate();
Log.d(LOG_TAG, "Date selected: " + date);
}
});
我仍然愿意接受任何其他建议或样本参考。