Android-Week-View icon indicating copy to clipboard operation
Android-Week-View copied to clipboard

notifyDatasetChanged not refreshing the calendar view

Open bharathnr21 opened this issue 7 years ago • 0 comments

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");

    }



}

bharathnr21 avatar Jul 11 '18 13:07 bharathnr21