2017-03-03 3 views
0

Ich habe eine Kalenderansicht, die es einem Benutzer ermöglicht, ein Datum auszuwählen und Aktivitäten einzugeben.Java Android CalendarView selectedDateChanged nicht aktualisieren

Ich habe eine Methode, die aufgerufen wird, wenn das gewählte Datum wird wie folgt geändert:

private void selectedDateChanged(CalendarView view, int year, int month, int dayOfMonth){ 
     //note: _Calendar is set to the view when activity loads hence the 
     //the reason for not using view.getDate(); 
     Long timeSinceEpoch = _Calendar.getDate(); 

     GregorianCalendar calendar = new GregorianCalendar(); 
     calendar.setTimeInMillis(timeSinceEpoch); 

     System.out.println(String.format("With gregorian calendar \n Day: %s \n Month: %s \n Year: %s", 
       calendar.DAY_OF_MONTH, calendar.MONTH, calendar.YEAR)); 

    } 

Die Methode jedes Mal das Datum ausgewählt Änderungen aufgerufen wird, ist die Frage der GregorianCalendar nicht jedes Mal, wenn die Methode der Aktualisierung wird genannt. Wenn ich einen neuen Tag wähle, wird

I/System.out: With gregorian calendar 
I/System.out: Day: 5 
I/System.out: Month: 2 
I/System.out: Year: 1 

ausgedruckt und nicht aktualisiert, wenn ein neues Datum ausgewählt wird.

Ich kann nicht herausfinden, wie die GregorianCalendar zu zwingen, zu aktualisieren und die javadoc für Calendar sagt, dass getDate()

+0

Warum nicht die übergebenen Parameter 'year',' month', 'dayOfMonth' verwenden? – petey

+1

@petey Ich werde das Datum von anderen Methoden erhalten müssen, die diese Parameter nicht haben. Dies war nur ein bequemer Ort, um es zu testen – kalenpw

Antwort

0

die aktuell ausgewählte Datum in Millisekunden seit dem Unix-Epoche zurückkehren sollte es Calendar.DAY_OF_MONTH stellt sich heraus, , Calendar.MONTH und CALENDAR.YEAR sind keine Felder mit dieser Information, sondern ganze Zahlen darstellen, die Sie suchen, wenn Sie Calendar.get();

So nennen dies recht einfach war Fixierung war ich erfuhr, dass der richtige Code ist:

private void selectedDateChanged(CalendarView view, int year, int month, int dayOfMonth){ 
     //note: _Calendar is set to the view when activity loads hence the 
     //the reason for not using view.getDate(); 
     Long timeSinceEpoch = _Calendar.getDate(); 

     GregorianCalendar calendar = new GregorianCalendar(); 
     calendar.setTimeInMillis(timeSinceEpoch); 

     //Notice instead of calling cal.DAY_OF_MONTH directly 
     //I now call calendar.get(Calendar.DAY_OF_MONTH) 
     System.out.println(String.format("With gregorian calendar \n Day: %s \n Month: %s \n Year: %s", 
       calendar.get(Calendar.DAY_OF_MONTH), calendar.get(Calendar.MONTH), calendar.get(Calendar.YEAR))); 

    } 
0
System.out.println(String.format("With gregorian calendar \n Day: %s \n Month: %s \n Year: %s", 
      dayOfMonth, month, year)); 
+0

Ich verwende absichtlich nicht die Parameter, weil ich in der Lage sein werde, den Tag, den Monat und das Jahr von anderen Methoden zu bekommen, wo ich nur Zugang zum Kalender haben werde – kalenpw

Verwandte Themen