Android-Week-View
Android-Week-View copied to clipboard
notifyDatasetChanged not refreshing the calendar view
I am calling getWeekView.notifyDatasetChanged () on OnActivtiyResult after adding the new event, but it is not showing the newly added event in the calendar view.
public class CalendarActivity extends MainActivity {
private List<WeekViewEvent> events = new ArrayList<WeekViewEvent>();
boolean calledNetwork = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
extras = getIntent().getExtras();
if(extras != null){
deviceId = extras.getString("device_id");
deviceName = extras.getString("device_name");
Log.d(LOG,deviceId);
}
}
@Override
public List<? extends WeekViewEvent> onMonthChange(int newYear, int newMonth) {
eventLists = new ArrayList<>();
if (!calledNetwork) {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
MyJsonService service = retrofit.create(MyJsonService.class);
Call<CalendarList> call = service.listEvents(deviceId);
call.enqueue(new Callback<CalendarList>() {
@Override
public void onResponse(Call<CalendarList> call, retrofit2.Response<CalendarList> response) {
eventLists = response.body().getData();
Log.d(LOG,eventLists.toString());
for(int i=0;i<eventLists.size();i++){
String calendarId = eventLists.get(i).getCalendarId();
String title = eventLists.get(i).getTitle();
String startYear = eventLists.get(i).getStartYear();
String startMonth = eventLists.get(i).getStartMonth();
String startDay = eventLists.get(i).getStartDay();
String startHour= eventLists.get(i).getStartHour();
String startMinute = eventLists.get(i).getStartMinute();
String endYear = eventLists.get(i).getEndYear();
String endMonth = eventLists.get(i).getEndMonth();
String endDay = eventLists.get(i).getEndDay();
String endHour = eventLists.get(i).getEndHour();
String endMinute = eventLists.get(i).getEndMinute();
setCalendarEvents(calendarId,title,Integer.parseInt(startYear),Integer.parseInt(startMonth),Integer.parseInt(startDay),Integer.parseInt(startHour),Integer.parseInt(startMinute),Integer.parseInt(endYear),Integer.parseInt(endMonth),Integer.parseInt(endDay),Integer.parseInt(endHour),Integer.parseInt(endMinute));
}
getWeekView().notifyDatasetChanged();
}
@Override
public void onFailure(Call call, Throwable t) {
Log.e("EVENTS_ERROR", t.toString());
}
});
calledNetwork = true;
}
List<WeekViewEvent> matchedEvents = new ArrayList<WeekViewEvent>();
for (WeekViewEvent event : events) {
if (eventMatches(event, newYear, newMonth)) {
matchedEvents.add(event);
}
}
return matchedEvents;
}
private boolean eventMatches(WeekViewEvent event, int year, int month) {
return (event.getStartTime().get(Calendar.YEAR) == year && event.getStartTime().get(Calendar.MONTH) == month - 1) || (event.getEndTime().get(Calendar.YEAR) == year && event.getEndTime().get(Calendar.MONTH) == month - 1);
}
public List<WeekViewEvent> setCalendarEvents(String id, String name, int startYear, int startMonth, int startDay, int startHour, int startMinute, int endYear, int endMonth, int endDay, int endHour, int endMinute){
events.add( new WeekViewEvent(id,name,startYear,startMonth,startDay,startHour,startMinute,endYear,endMonth,endDay,endHour,endMinute));
return events;
}
public List<WeekViewEvent> setCalendarEvents(String day,String month,String year,String startHour,String startMinute,String startSeconds,String endHour,String endMinute,String endSeconds,String id,String title){
/* Calendar startTime = Calendar.getInstance();
startTime.set(Calendar.HOUR_OF_DAY, Integer.parseInt(startHour));
startTime.set(Calendar.MINUTE, Integer.parseInt(startMinute));
startTime.set(Calendar.MONTH, Integer.parseInt(month));
startTime.set(Calendar.YEAR, Integer.parseInt(year));
startTime.set(Calendar.DAY_OF_MONTH,Integer.parseInt(day));
Calendar endTime = (Calendar) startTime.clone();
endTime.add(Calendar.HOUR, Integer.parseInt(endHour));
endTime.set(Calendar.MONTH, Integer.parseInt(month));
event = new WeekViewEvent(id, getEventTitle(startTime), startTime, endTime);
event.setColor(getResources().getColor(R.color.event_color_01));
events.add(event);
Log.d("EVENTS",""+events.get(0));*/
Calendar now = Calendar.getInstance();
Calendar startTime = (Calendar) now.clone();
// startTime.setTimeInMillis(starttime);
startTime.set(Calendar.HOUR_OF_DAY, Integer.parseInt(startHour));
startTime.set(Calendar.MINUTE, Integer.parseInt(startMinute));
startTime.set(Calendar.MONTH, Integer.parseInt(month));
startTime.set(Calendar.YEAR, Integer.parseInt(year));
startTime.set(Calendar.DAY_OF_MONTH,Integer.parseInt(day));
Calendar endTime = (Calendar) startTime.clone();
//endTime.setTimeInMillis(endtime);
endTime.set(Calendar.HOUR_OF_DAY, Integer.parseInt(endHour));
endTime.set(Calendar.MINUTE, Integer.parseInt(endMinute));
endTime.set(Calendar.MONTH, Integer.parseInt(month));
endTime.set(Calendar.DAY_OF_MONTH,Integer.parseInt(day));
// Create an week view event.
WeekViewEvent weekViewEvent = new WeekViewEvent();
weekViewEvent.setName(title);
weekViewEvent.setStartTime(startTime);
weekViewEvent.setEndTime(endTime);
weekViewEvent.setColor(Color.parseColor("#F8B552"));
return events;
}
@Override
public void onEventClick(WeekViewEvent event, RectF eventRect) {
Toast.makeText(this, "Clicked " + event.getName(), Toast.LENGTH_SHORT).show();
}
@Override
public void onEventLongPress(WeekViewEvent event, RectF eventRect) {
Toast.makeText(this, "Long pressed event: " + event.getName(), Toast.LENGTH_SHORT).show();
}
@Override
public void onEmptyViewLongPress(Calendar time) {
SimpleDateFormat dateFormatDate = new SimpleDateFormat("EEE,MMMM d,yyyy", Locale.ENGLISH);
SimpleDateFormat dateFormatTime = new SimpleDateFormat("hh:mm a",Locale.ENGLISH);
Calendar endtime = Calendar.getInstance();
endtime.setTime(time.getTime());
endtime.add(Calendar.HOUR,1);
Log.d("START_DATE",""+dateFormatDate.format(time.getTime()));
Log.d("START_TIME",""+dateFormatTime.format(time.getTime()));
Log.d("END_DATE",""+dateFormatDate.format(time.getTime()));
Log.d("END_TIME",""+dateFormatTime.format(endtime.getTime()));
Intent intent = new Intent(CalendarActivity.this,AddCalendarEventActivtiy.class);
intent.putExtra("device_id",deviceId);
intent.putExtra("device_name",deviceName);
intent.putExtra("start_date",dateFormatDate.format(time.getTime()));
intent.putExtra("start_time",dateFormatTime.format(time.getTime()));
intent.putExtra("end_date",dateFormatDate.format(time.getTime()));
intent.putExtra("end_time",dateFormatTime.format(endtime.getTime()));
startActivityForResult(intent,REQUEST_SUCCESS);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode != REQUEST_FAILURE ){
if (requestCode == resultCode){
if(data !=null) {
HashMap<String, String> result = (HashMap<String, String>) data.getSerializableExtra("result");
Log.d("Result", result.get("event_title"));
getWeekView().notifyDatasetChanged();
}
}
}else{
Log.d("FAILURE","FAILURE");
}
}