title: Adding events in a Custom Calendar - Android Studio
body: <p>I have a custom calendar in android studio and I want to add an event in a random day of the calendar, for example "Dimitri's Birthday Party"/19h00/Moscow. Can someone help with the code for this?</p>
  
  <p><a href="http://i.stack.imgur.com/IIilc.png" rel="nofollow">http://i.stack.imgur.com/IIilc.png</a> &lt;-- Calendar</p>
  
  <pre><code>public class MyCalendarActivity extends Activity implements OnClickListener {
  private static final String tag = "MyCalendarActivity";
  
  private TextView currentMonth;
  private Button selectedDayMonthYearButton;
  private ImageView prevMonth;
  private ImageView nextMonth;
  private GridView calendarView;
  private GridCellAdapter adapter;
  private Calendar _calendar;
  @SuppressLint("NewApi")
  private int month, year;
  @SuppressWarnings("unused")
  @SuppressLint({ "NewApi", "NewApi", "NewApi", "NewApi" })
  private final DateFormat dateFormatter = new DateFormat();
  private static final String dateTemplate = "MMMM yyyy";
  
  
  @Override
  public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_my_calendar);
  
      _calendar = Calendar.getInstance(Locale.getDefault());
      month = _calendar.get(Calendar.MONTH) + 1;
      year = _calendar.get(Calendar.YEAR);
      Log.d(tag, "Calendar Instance:= " + "Month: " + month + " " + "Year: "
              + year);
  
      selectedDayMonthYearButton = (Button) this
              .findViewById(R.id.selectedDayMonthYear);
      selectedDayMonthYearButton.setText("Selected: ");
  
      prevMonth = (ImageView) this.findViewById(R.id.prevMonth);
      prevMonth.setOnClickListener(this);
  
      currentMonth = (TextView) this.findViewById(R.id.currentMonth);
      currentMonth.setText(DateFormat.format(dateTemplate,
              _calendar.getTime()));
  
      nextMonth = (ImageView) this.findViewById(R.id.nextMonth);
      nextMonth.setOnClickListener(this);
  
      calendarView = (GridView) this.findViewById(R.id.calendar);
  
  
      adapter = new GridCellAdapter(getApplicationContext(),
              R.id.calendar_day_gridcell, month, year);
      adapter.notifyDataSetChanged();
      calendarView.setAdapter(adapter);
  }
  
  
  private void setGridCellAdapterToDate(int month, int year) {
      adapter = new GridCellAdapter(getApplicationContext(),
              R.id.calendar_day_gridcell, month, year);
      _calendar.set(year, month - 1, _calendar.get(Calendar.DAY_OF_MONTH));
      currentMonth.setText(DateFormat.format(dateTemplate,
              _calendar.getTime()));
      adapter.notifyDataSetChanged();
      calendarView.setAdapter(adapter);
  }
  
  @Override
  public void onClick(View v) {
      if (v == prevMonth) {
          if (month &lt;= 1) {
              month = 12;
              year--;
          } else {
              month--;
          }
          Log.d(tag, "Setting Prev Month in GridCellAdapter: " + "Month: "
                  + month + " Year: " + year);
          setGridCellAdapterToDate(month, year);
      }
      if (v == nextMonth) {
          if (month &gt; 11) {
              month = 1;
              year++;
          } else {
              month++;
          }
          Log.d(tag, "Setting Next Month in GridCellAdapter: " + "Month: "
                  + month + " Year: " + year);
          setGridCellAdapterToDate(month, year);
      }
  
  }
  
  @Override
  public void onDestroy() {
      Log.d(tag, "Destroying View ...");
      super.onDestroy();
  }
  
  
  public class GridCellAdapter extends BaseAdapter implements OnClickListener {
      private static final String tag = "GridCellAdapter";
      private final Context _context;
  
      private final List&lt;String&gt; list;
      private static final int DAY_OFFSET = 1;
      private final String[] weekdays = new String[] { "Dom", "Seg", "Ter",
              "Qua", "Qui", "Sex", "Sáb" };
      private final String[] months = { "Janeiro", "Fevereiro", "Março",
              "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro",
              "Outubro", "Novembro", "Dezembro" };
      private final int[] daysOfMonth = { 31, 28, 31, 30, 31, 30, 31, 31, 30,
              31, 30, 31 };
      private int daysInMonth;
      private int currentDayOfMonth;
      private int currentWeekDay;
      private Button gridcell;
      private TextView num_events_per_day;
      private final HashMap&lt;String, Integer&gt; eventsPerMonthMap;
      private final SimpleDateFormat dateFormatter = new SimpleDateFormat("dd-MMM-yyyy");
  
  
      public GridCellAdapter(Context context, int textViewResourceId,
                             int month, int year) {
          super();
          this._context = context;
          this.list = new ArrayList&lt;String&gt;();
          Log.d(tag, "==&gt; Passed in Date FOR Month: " + month + " "
                  + "Year: " + year);
          Calendar calendar = Calendar.getInstance();
          setCurrentDayOfMonth(calendar.get(Calendar.DAY_OF_MONTH));
          setCurrentWeekDay(calendar.get(Calendar.DAY_OF_WEEK));
          Log.d(tag, "New Calendar:= " + calendar.getTime().toString());
          Log.d(tag, "CurrentDayOfWeek :" + getCurrentWeekDay());
          Log.d(tag, "CurrentDayOfMonth :" + getCurrentDayOfMonth());
  
  
          printMonth(month, year);
  
  
          eventsPerMonthMap = findNumberOfEventsPerMonth(year, month);
      }
  
      private String getMonthAsString(int i) {
          return months[i];
      }
  
      private String getWeekDayAsString(int i) {
          return weekdays[i];
      }
  
      private int getNumberOfDaysOfMonth(int i) {
          return daysOfMonth[i];
      }
  
      public String getItem(int position) {
          return list.get(position);
      }
  
      @Override
      public int getCount() {
          return list.size();
      }
  
  
      private void printMonth(int mm, int yy) {
          Log.d(tag, "==&gt; printMonth: mm: " + mm + " " + "yy: " + yy);
          int trailingSpaces = 0;
          int daysInPrevMonth = 0;
          int prevMonth = 0;
          int prevYear = 0;
          int nextMonth = 0;
          int nextYear = 0;
  
          int currentMonth = mm - 1;
          String currentMonthName = getMonthAsString(currentMonth);
          daysInMonth = getNumberOfDaysOfMonth(currentMonth);
  
          Log.d(tag, "Current Month: " + " " + currentMonthName + " having "
                  + daysInMonth + " days.");
  
          GregorianCalendar cal = new GregorianCalendar(yy, currentMonth, 1);
          Log.d(tag, "Gregorian Calendar:= " + cal.getTime().toString());
  
          if (currentMonth == 11) {
              prevMonth = currentMonth - 1;
              daysInPrevMonth = getNumberOfDaysOfMonth(prevMonth);
              nextMonth = 0;
              prevYear = yy;
              nextYear = yy + 1;
              Log.d(tag, "*-&gt;PrevYear: " + prevYear + " PrevMonth:"
                      + prevMonth + " NextMonth: " + nextMonth
                      + " NextYear: " + nextYear);
          } else if (currentMonth == 0) {
              prevMonth = 11;
              prevYear = yy - 1;
              nextYear = yy;
              daysInPrevMonth = getNumberOfDaysOfMonth(prevMonth);
              nextMonth = 1;
              Log.d(tag, "**--&gt; PrevYear: " + prevYear + " PrevMonth:"
                      + prevMonth + " NextMonth: " + nextMonth
                      + " NextYear: " + nextYear);
          } else {
              prevMonth = currentMonth - 1;
              nextMonth = currentMonth + 1;
              nextYear = yy;
              prevYear = yy;
              daysInPrevMonth = getNumberOfDaysOfMonth(prevMonth);
              Log.d(tag, "***---&gt; PrevYear: " + prevYear + " PrevMonth:"
                      + prevMonth + " NextMonth: " + nextMonth
                      + " NextYear: " + nextYear);
          }
  
          int currentWeekDay = cal.get(Calendar.DAY_OF_WEEK) - 1;
          trailingSpaces = currentWeekDay;
  
          Log.d(tag, "Week Day:" + currentWeekDay + " is "
                  + getWeekDayAsString(currentWeekDay));
          Log.d(tag, "No. Trailing space to Add: " + trailingSpaces);
          Log.d(tag, "No. of Days in Previous Month: " + daysInPrevMonth);
  
          if (cal.isLeapYear(cal.get(Calendar.YEAR)))
              if (mm == 2)
                  ++daysInMonth;
              else if (mm == 3)
                  ++daysInPrevMonth;
  
  
          for (int i = 0; i &lt; trailingSpaces; i++) {
              Log.d(tag,
                      "PREV MONTH:= "
                              + prevMonth
                              + " =&gt; "
                              + getMonthAsString(prevMonth)
                              + " "
                              + String.valueOf((daysInPrevMonth
                              - trailingSpaces + DAY_OFFSET)
                              + i));
              list.add(String
                      .valueOf((daysInPrevMonth - trailingSpaces + DAY_OFFSET)
                              + i)
                      + "-GREY"
                      + "-"
                      + getMonthAsString(prevMonth)
                      + "-"
                      + prevYear);
          }
  
  
          for (int i = 1; i &lt;= daysInMonth; i++) {
              Log.d(currentMonthName, String.valueOf(i) + " "
                      + getMonthAsString(currentMonth) + " " + yy);
              if (i == getCurrentDayOfMonth()) {
                  list.add(String.valueOf(i) + "-BLUE" + "-"
                          + getMonthAsString(currentMonth) + "-" + yy);
              } else {
                  list.add(String.valueOf(i) + "-WHITE" + "-"
                          + getMonthAsString(currentMonth) + "-" + yy);
              }
          }
  
  
          for (int i = 0; i &lt; list.size() % 7; i++) {
              Log.d(tag, "NEXT MONTH:= " + getMonthAsString(nextMonth));
              list.add(String.valueOf(i + 1) + "-GREY" + "-"
                      + getMonthAsString(nextMonth) + "-" + nextYear);
          }
      }
  
  
      private HashMap&lt;String, Integer&gt; findNumberOfEventsPerMonth(int year,
                                                                  int month) {
          HashMap&lt;String, Integer&gt; map = new HashMap&lt;String, Integer&gt;();
  
          return map;
      }
  
      @Override
      public long getItemId(int position) {
          return position;
      }
  
      @Override
      public View getView(int position, View convertView, ViewGroup parent) {
          View row = convertView;
          if (row == null) {
              LayoutInflater inflater = (LayoutInflater) _context
                      .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
              row = inflater.inflate(R.layout.screen_gridcell, parent, false);
          }
  
          // Get a reference to the Day gridcell
          gridcell = (Button) row.findViewById(R.id.calendar_day_gridcell);
          gridcell.setOnClickListener(this);
  
          // ACCOUNT FOR SPACING
  
          Log.d(tag, "Current Day: " + getCurrentDayOfMonth());
          String[] day_color = list.get(position).split("-");
          String theday = day_color[0];
          String themonth = day_color[2];
          String theyear = day_color[3];
          if ((!eventsPerMonthMap.isEmpty()) &amp;&amp; (eventsPerMonthMap != null)) {
              if (eventsPerMonthMap.containsKey(theday)) {
                  num_events_per_day = (TextView) row
                          .findViewById(R.id.num_events_per_day);
                  Integer numEvents = (Integer) eventsPerMonthMap.get(theday);
                  num_events_per_day.setText(numEvents.toString());
              }
          }
  
          // Set the Day GridCell
          gridcell.setText(theday);
          gridcell.setTag(theday + "-" + themonth + "-" + theyear);
          Log.d(tag, "Setting GridCell " + theday + "-" + themonth + "-"
                  + theyear);
  
          if (day_color[1].equals("GREY")) {
              gridcell.setTextColor(getResources()
                      .getColor(R.color.lightgray));
          }
          if (day_color[1].equals("WHITE")) {
              gridcell.setTextColor(getResources().getColor(
                      R.color.lightgray02));
          }
          if (day_color[1].equals("BLUE")) {
              gridcell.setTextColor(getResources().getColor(R.color.orrange));
          }
          return row;
      }
  
      @Override
      public void onClick(View view) {
          String date_month_year = (String) view.getTag();
          selectedDayMonthYearButton.setText("Selected: " + date_month_year);
          Log.e("Selected date", date_month_year);
          try {
              Date parsedDate = dateFormatter.parse(date_month_year);
              Log.d(tag, "Parsed Date: " + parsedDate.toString());
  
          } catch (ParseException e) {
              e.printStackTrace();
          }
      }
  
      public int getCurrentDayOfMonth() {
          return currentDayOfMonth;
      }
  
      private void setCurrentDayOfMonth(int currentDayOfMonth) {
          this.currentDayOfMonth = currentDayOfMonth;
      }
  
      public void setCurrentWeekDay(int currentWeekDay) {
          this.currentWeekDay = currentWeekDay;
      }
  
      public int getCurrentWeekDay() {
          return currentWeekDay;
      }
  }
  </code></pre>
  
  <p>}</p>