Reputation: 685
Hello masters of Android & Java :) I've spent about 5 hours today trying to find out how to filter my ArrayList<WeekViewEvent>
(I'm using Alamkanak's WeekView external library) so my layout with custom arrayadapter can display events that match today's date (only monday events on Monday 5th Feb, tuesday events on Tuesday 6th Feb and so on...).
This is how I create my WeekViewEvent
's ArrayList:
List<WeekViewEvent> newEvents = new ArrayList<WeekViewEvent>();
Calendar startTime = Calendar.getInstance();
startTime.set(Calendar.HOUR_OF_DAY, 12);
startTime.set(Calendar.MINUTE, 0);
startTime.set(Calendar.MONTH, 1);
startTime.set(Calendar.YEAR, 2018);
Calendar endTime = (Calendar) startTime.clone();
endTime.add(Calendar.HOUR, 13);
endTime.set(Calendar.MINUTE, 0);
endTime.set(Calendar.MONTH, 1);
endTime.set(Calendar.YEAR, 2018);
WeekViewEvent event = new WeekViewEvent(7777, "All lucky 7's, startTime, endTime);
event.setColor(R.color.event_color_01);
newEvents.add(event);
and then the list is passed on to the adapter:
Adapter adapterevent = new Adapter(this, events);
ListView listView = (ListView) findViewById(R.id.harmonogram_list_view);
listView.setAdapter(adapterevent);
Is it even possible to "filter" the events by date ? Been reading some other posts, but to tell the truth the only operations I performed with ArrayList's were limited to adding, removing or gettin lenght of the array...
What I'm thinking about is filtering events by looping and searching for start and end date and then creating new ArrayList like:
ArrayList<WeekViewEvent> filteredEvents = new ArrayList<>();
for (WeekviewEvent event : NewEvents) {
if(event.getStartTime().getTimeInMillis() >= start of the current day && event.getEndTime().getTimeInMillis <= end of the current day
events.add(event);
}
}
return filteredEvents;
but I'm not sure if this is the right way to follow and if so - how to write rest of the code to grab only selected events.
Any help would be greatly appreciated! Thank you in advance, Matt :)
Upvotes: 1
Views: 2661
Reputation: 685
Finally I was able to make it work by getting/setting the instance of Calendar
, converting date to miliseconds and modyfing the loop (as I thought):
Calendar startTime = Calendar.getInstance();
startTime.set(Calendar.HOUR_OF_DAY, 0);
startTime.set(Calendar.MINUTE, 0);
startTime.set(Calendar.SECOND, 0);
Calendar endTime = (Calendar) startOfMonth.clone();
endTime.set(Calendar.HOUR_OF_DAY, 23);
endTime.set(Calendar.MINUTE, 59);
endTime.set(Calendar.SECOND, 59);
ArrayList<WeekViewEvent> events = new ArrayList<>();
for (WeekViewEvent event : newEvents) {
if (event.getEndTime().getTimeInMillis() > startTime.getTimeInMillis() &&
event.getStartTime().getTimeInMillis() < endTime.getTimeInMillis())
{
events.add(event);
}
}
Now the adapter display events that match Calendar criteria (the same actual day).
Upvotes: 1