2011-01-10 4 views
0

Я создал календарь, в котором суп может прокручивать календарь прошлых и последующих месяцев, но проблема, с которой я сталкиваюсь, - это когда пользователь пытается прокрутить предыдущий месяц.Java Calendar date month not set правильно

Когда пользователь нажимает на предыдущий месяц при первом запуске приложения, он работает, но когда пользователь нажимает повторно, он не передает значение, которое я отправляю в Calendar.Set(), на 100% правильный и даже отлаженный он все же фактический календарь не обновляет и, следовательно, возвращает мне тот же месяц, что и текущий!

вот мой код ниже.

@Override 
public void onClick(View v) { 

    // get current month 

    int currentMonth = mCurrentMonth.get(Calendar.MONTH); 
    Log.d(TAG, "day = " + mCurrentMonth.get(Calendar.DAY_OF_MONTH)); 

    Log.d(TAG, "currentMonth in onClick = " + currentMonth); 
    if (v == mPreviousMonthButton) { 
     Log.d(TAG, "mPreviousMonthButton CLICKED "); 

     // if current month is january 
     // decrement the current year and set month to december 

     if (currentMonth == Calendar.JANUARY) { 
      int currentYear = mCurrentMonth.get(Calendar.YEAR); 
      mCurrentMonth.set(Calendar.YEAR, currentYear - 1); 
      mCurrentMonth.set(Calendar.MONTH, Calendar.DECEMBER); 
     } else { 

      // else decrement the month 

      Log.d(TAG, "currentMonth-- = " + currentMonth); 
      mCurrentMonth.set(Calendar.MONTH, currentMonth); 
      Log.d(TAG, 
        "month in previus button = " 
          + mCurrentMonth.get(Calendar.MONTH)); 

     } 
     // save the month 

     setDateForMonth(); 

    } else if (v == mNextMonthButton) { 
     Log.d(TAG, "mNextMonthButton CLICKED "); 

     if (currentMonth == Calendar.DECEMBER) { 
      int currentYear = mCurrentMonth.get(Calendar.YEAR); 
      mCurrentMonth.set(Calendar.YEAR, currentYear + 1); 
      mCurrentMonth.set(Calendar.MONTH, Calendar.JANUARY); 
     } else { 
           currentMonth--; 
      mCurrentMonth.set(Calendar.MONTH, currentMonth + 1); 
      Log.d(TAG, "currentMonth++ = " + currentMonth + 1); 
      Log.d(TAG, 
        "month in next button = " 
          + mCurrentMonth.get(Calendar.MONTH)); 

     } 

     // save the month 

     setDateForMonth(); 

    } 

} 

вот код, который фактически обновляет пользовательский интерфейс. проблема Somwhere в OnClick, как он возвращает неверный месяц в коде ниже:

частная пустота setDateForMonth() {

monthList.clear(); 

    Log.d(TAG, ".........setDateForMonth..........."); 
    Log.d(TAG, "...................."); 

    Log.d(TAG, "month = " + mCurrentMonth.get(Calendar.MONTH)); 
    Log.d(TAG, "year = " + mCurrentMonth.get(Calendar.YEAR)); 

    CalendarMonth[] months = CalendarUtils 
      .constructMonthViewArray(mCurrentMonth); 

    for (int i = 0; i < months.length; i++) { 
     monthList.add(months[i]); 
     Log.d(TAG, monthList.get(i).getDay()); 
    } 
    Log.d(TAG, "...................."); 

    mAdapter = new CalendarMonthAdapter(mContext, monthList); 
    mMonthGridView.setAdapter(mAdapter); 
    Months[] month = Months.values(); 

    String currentMonth = month[mCurrentMonth.get(Calendar.MONTH)] 
      .toString(); 
    String year = Integer.toString(mCurrentMonth.get(Calendar.YEAR)); 
    mMonthLabel.setText(currentMonth + " " + year); 

} 

частных перечислений месяца {января, февраль, март, апрель, Май, Июль, август, сентябрь, октябрь, Ноябрь, декабрь};

+1

Это не то, как вы отправляете код в Stackoverflow. Каждая строка кода должна быть отступом на 4 пробела. – Pointy

+0

исправлено сейчас mate thanks – jonney

ответ

2

падения Java Календарь и перейти к JodaTime

+0

в той же строке, drop java и перейти на C#? – KevinDTimm

+0

@KevinDTimm. ха-ха - теперь, давайте не будем входить в этот старый каштан. –

3

Если я что-то отсутствует, вы никогда не уменьшаем месяц, за исключением случаев, когда месяц январь.

int currentMonth = mCurrentMonth.get(Calendar.MONTH); 
... 
if (currentMonth == Calendar.JANUARY) { 
    int currentYear = mCurrentMonth.get(Calendar.YEAR); 
    mCurrentMonth.set(Calendar.YEAR, currentYear - 1); 
    mCurrentMonth.set(Calendar.MONTH, Calendar.DECEMBER); 
} 
else { 
    // else decrement the month 
    Log.d(TAG, "currentMonth-- = " + currentMonth); 
    mCurrentMonth.set(Calendar.MONTH, currentMonth); 

У вас есть комментарий, который говорит, чтобы уменьшить месяц, и даже журнал комментарий, который говорит, что вы должны быть декремента месяц ... но не фактический декремент :)

else { 
    currentMonth--; 
    mCurrentMonth.set(Calendar.MONTH, currentMonth); 
+0

Я думаю, что я удалился по ошибке, когда я что-то пытался, но изначально у меня было это. я добавил еще раз, и дата все еще не меняется. – jonney

+0

Когда я сначала нажимаю на предыдущую кнопку, она устанавливает месяц до 11 (декабрь), так как это январь в этом месяце, когда я нажимаю снова, currentMonth получает decretnted успешно gtom 11 to 10 как показано на моем log.d() i, установите месяц в текущий месяц значения 10, и он по-прежнему не устанавливает его должным образом, когда я позже в моем коде делаю log.d, чтобы получить текущий месяц. – jonney

+0

@jonney Ваш журнал показывает, что вы установили текущий месяц на 10. Что значит, что он не установлен правильно? –

1

Для добавить или вычесть месяц использования mCalendar.add(Calendar.MONTH, 1);mCalendar.add(Calendar.MONTH, -1);

0

Его лучше использовать date4J jar вместо классов Calendar или Date Java.

+0

Время в Joda - единственное, что нужно использовать – jonney

+0

Просьба посмотреть ссылку, которую я предоставил, и посмотреть проблемы с временем в Joda http://www.date4j.net/#Joda – Ali