material-calendarview Hintergrundfarbe der Daten festlegen

8

Mein Ziel ist es, eine Android-Bibliothek zu finden, mit der ich verschiedene Daten in einer Kalenderansicht basierend auf einem Array markieren kann. Die Daten können oder können nicht zusammenhängend sein. Mein ideales Szenario ist, die Hintergrundfarbe jedes Datums zu ändern. Die wesentliche Komplikation ist, dass ich diese Farbe erst zur Laufzeit kenne, da sie von einer Serverabfrage kommt.

Ich habe das den ganzen Tag erforscht, und meine beste Hoffnung scheint material-calendarview ( github ) zu sein. Allerdings finde ich ihren Code etwas undurchdringlich, was auf mich zukommt, aber ich bin völlig festgefahren.

Ich habe einen solchen Kalender in meinem XML-Layout hinzugefügt:

%Vor%

Und dann habe ich in meiner Aktivität diese Instanzvariablen:

%Vor%

und diesen Code in meinem onCreateView()

%Vor%

Ok, einfach genug. Aber ich kann nicht herausfinden, wie ich den Kalender aus meiner Datenreihe markieren soll. Ich arbeite an dieser Methode, aber ich weiß einfach nicht weiter, was ich hier habe:

%Vor%

Diese letzte Zeile bezieht sich auf diese innere Klasse:

%Vor%

Ich denke, dass meine Herausforderung darin besteht, mein ArrayList<Date> markedDates in das umzuwandeln, was sie Collection<CalendarDay> dates nennen. Zustimmen? Aber hier bin ich wirklich versaut. Diese Datenstruktur ist seltsam für mich. Wenn ich versuche, es zu instanziieren, indem ich new CalendarDay() aufruft, wird meine Klasse sofort mit ungefähr 10 neuen Methoden erweitert, deren Rolle ich nicht verstehe oder was ich damit anfangen soll. Klar, ich gehe hier von der Strecke. Es kann einfach nicht so schwierig sein.

Hat jemand diese Bibliothek zu diesem Zweck benutzt und weiß, wie man diese Aufgabe erledigt? Ich bin am Ende. Auch wenn es eine einfachere Bibliothek gibt, die es mir ermöglicht, Hintergrundfarben mit einer Farbe zu setzen, die nur zur Laufzeit bekannt ist, bin ich ganz Ohr.

Danke für jede Hilfe. Ich befürchte, dass ich dies auf verwirrende Weise geschrieben habe, was darauf zurückzuführen ist, dass ich völlig verwirrt bin.

    
Alex 04.11.2015, 02:31
quelle

3 Antworten

3

Ich habe das gelöst, also werde ich diese Lösung posten, falls jemand dieselbe Frage hat. Wenn es einen effizienteren Weg gibt, posten Sie bitte als Lösung.

Ich erwähnte, dass ich ein Array mit einer Liste von Daten habe. Was ich tun muss, ist über dieses Array zu iterieren, wobei jedes Date in ein Calendar -Objekt konvertiert wird, das auf das entsprechende Jahr, den Monat und den Tag gesetzt wird, und dieses Objekt dann zu einem anderen ArrayList hinzugefügt wird, diesmal ein% Code%. Zum Beispiel:

%Vor%

So, jetzt haben wir diese Liste von ArrayList<CalendarDay> -Objekten, aber wir sind nicht ganz da. Der letzte Schritt bei der Erstellung der Datenstruktur besteht darin, dies in das zu überführen, mit dem ich in der OP gekämpft habe - eine CalendarDay -Struktur. Es stellte sich heraus, dass dies nicht einfacher sein könnte, sobald wir hier sind. Ordnen Sie es einfach so zu:

%Vor%

Und dann, wenn Sie den Dekorateur hinzufügen möchten, sind Sie alle eingerichtet. Tun Sie das einfach:

%Vor%

Eine andere Sache erwähnt, und das war eine Hauptquelle meiner Verwirrung. Ich habe nicht verstanden, wie dieses Objekt Collection<CalendarDay> instanziiert wird. Weit oben im Bereich der Instanzvariablen (vor dem Konstruktor) habe ich diesen Code hinzugefügt, den Android Studio fast vollständig ausgefüllt hat:

%Vor%

Ich hoffe, dass das jemandem hilft. Auch wenn es eine bessere Lösung gibt, bitte posten und ich werde meine löschen.

    
Alex 04.11.2015 07:34
quelle
3

Wenn Sie die Hintergrundfarbe des ausgewählten Programms ändern möchten, verwenden Sie diese Methode: -

%Vor%

Wenn Sie diesen Code verwenden, werden alle Selektoren derselben Farbe verwendet. Wenn Sie also abhängig von Ihrer Bedingung verschiedene Farbselektoren verwenden möchten, verwenden Sie decorator ()

    
Mrinmoy 02.09.2016 10:42
quelle
2

Warum haben Sie die ArrayList anstelle des HashSet verwendet? Der Grund, warum Sie Collection nicht instanziieren können, ist, dass es eine Schnittstelle ist. Daher mussten Sie eine anonyme Klasse erstellen und die Methoden überschreiben.

Hier habe ich etwas ähnliches gemacht:

Diese Methode nimmt zwei Kalenderobjekte auf und fügt alle Tage zwischen den beiden Kalenderdaten in ein HashSet von CalendarDays ein.

%Vor%

Bei der Methode onCreateView (...) habe ich die zwei Kalenderdaten dynamisch festgelegt, deren Unterschied im HashSet gespeichert wird. Sie können jedoch Ihre eigenen zufälligen Daten im HashSet übergeben.

%Vor%

In meinem Fall ist BookingDecorator die Klasse, die die DayViewDecorator-Schnittstelle implementiert.

%Vor%

Ihr Beitrag war sehr hilfreich. Hoffnung meins hilft auch jemandem.

    
Sameer Khanal 12.08.2016 04:40
quelle

Tags und Links