我的应用中有一个界面,可以从给定的日期范围加载Android日历的事件。
"返回日期" 按钮,允许用户过去一个月导航(以获取自该日期以来的事件)。
这是我在两个日期之间获取事件的代码:
private List<CalendarEvent> getEventsFromCalendar(Date dateSince, Date dateUntil) {
try {
ArrayList<CalendarEvent> list = new ArrayList<CalendarEvent>();
String[] projections = { CalendarContract.Events._ID, CalendarContract.Events.TITLE, CalendarContract.Events.DTSTART};
String cond = CalendarContract.Events.DTSTART+" >= "+dateSince.getTime();
if(dateUntil != null){
cond += " AND "+CalendarContract.Events.DTSTART+" < "+dateUntil.getTime();
}
Cursor c = this.getActivity().getContentResolver().query(Constants.CALENDAR_EVENTS_URI, projections, cond, null, CalendarContract.Events.DTSTART);
if(c!=null){
while (c.moveToNext()) {
int id = c.getInt(c.getColumnIndex(CalendarContract.Events._ID));
String title = c.getString(c.getColumnIndex(CalendarContract.Events.TITLE));
Date start = new Date(c.getLong(c.getColumnIndex(CalendarContract.Events.DTSTART)));
CalendarEvent event = new CalendarEvent(id, title, start);
list.add(event);
}
c.close();
}
return list;
} catch (Exception e) {
logger.error(e.getMessage());
return new ArrayList<>();
}
}
我的问题:
我希望在过去没有事件时禁用&#34;返回日期&#34; 按钮(dateSince
之前没有其他事件)。
我的第一个念头:
每当我调用getEventsFromCalendar()
方法时,我会使用条件query
的另一个 CalendarContract.Events.DTSTART+" < "+dateSince.getTime();
来检查过去是否有更多事件。因此,如果我没有得到任何结果,我会禁用我的按钮。
但我不想加载所有过去的事件,只是为了检查它们的存在。
问题:
是否有更好的解决方案来检查在给定日期之前Calendar
中是否有事件(换句话说,事件在给定日期之前开始)?
是否可以从Calendar
按组获取活动?
例如:获得前10个事件(从第1个到第11个),然后是接下来的10个事件(从第12个到第21个)......
提前致谢!