Существует очень хорошая библиотека (https://github.com/Applandeo/Материал-Календарь-Просмотр) для настройки календаря Android. Например, для добавления событий в представление календаря существует класс с именем Eventday.java, который принимает объект календаря и объект рисования в качестве параметров для инициализации. Я бы хотел, чтобы он также принимал строковое значение, чтобы я также мог хранить описание события, потому что нет смысла добавлять события в календарь, если нельзя добавить подробности о событии (строковый тип данных). Может ли кто-нибудь предложить обходной путь для моей проблемы?
List<EventDay> events = new ArrayList<>();
Calendar calendar = Calendar.getInstance();
//we cannot details about the event(string data) while initializing the EventDay class
events.add(new EventDay(calendar, R.drawable.absentic));
Я хочу показать это описание в новом диалоговом окне, когда пользователь нажимает дату события.




Сначала создайте собственный класс
import com.applandeo.materialcalendarview.EventDay;
import java.util.Calendar;
public class MyEventDay extends EventDay implements Parcelable {
private String mNote;
public MyEventDay(Calendar day, int imageResource, String note) {
super(day, imageResource);
mNote = note;
}
public String getNote() {
return mNote;
}
private MyEventDay(Parcel in) {
super((Calendar) in.readSerializable(), in.readInt());
mNote = in.readString();
}
public static final Creator<MyEventDay> CREATOR = new Creator<MyEventDay>() {
@Override
public MyEventDay createFromParcel(Parcel in) {
return new MyEventDay(in);
}
@Override
public MyEventDay[] newArray(int size) {
return new MyEventDay[size];
}
};
@Override
public void writeToParcel(Parcel parcel, int i) {
parcel.writeSerializable(getCalendar());
parcel.writeInt(getImageResource());
parcel.writeString(mNote);
}
@Override
public int describeContents() {
return 0;
}
}
Добавление события в календарь
mEventDays.add(new MyEventDay(calender, R.drawable.ic_note_sticky, "I am Event");
Для извлечения строки
calendarView.setOnDayClickListener(new OnDayClickListener() {
@Override
public void onDayClick(EventDay eventDay) {
Log.e("Event",((MyEventDay) eventDay).getNote()+" <--");
}
});
Это работает для меня, я надеюсь, что это полезно и для вас.
кажется хорошим обходным путем ... но небольшая проблема ... в функции функции writeToParcel функция getImageResource () не распознается (при ошибке зависания, отображаемой как «Не удается разрешить метод»)... он думает, что это должно быть getImageDrawable ( ) из исходного класса EventDay, но тогда будет ошибка приведения из-за посылки.writeInt()
Это работает для меня, настройте в соответствии с вашими требованиями
я преобразовал рисование в растровое изображение, и написал в посылку, а не работает! ... Большое спасибо, брат, ты спасатель жизни ... не могли бы вы также немного объяснить свой код ... как я понял, вы расширили оригинал класс в пользовательском классе, чтобы наследовать его функции, но почему вы реализовали Parcelable? ...в любом случае еще раз спасибо :)
Я просто взял код из Google, и он работает для меня, ссылка здесь applandeo.com/blog/…, пожалуйста, проверьте ее.
Я использовал этот метод для отображения небольшой всплывающей заметки, когда пользователь нажимает на любую дату.
Map<Date,String> eventNotes = new HashMap<>()eventNotes необходимыми заметками и датой в качестве ключа.setOnDayClickListener получено eventNote с помощью ключа eventDay.getCalendar().getTime()
где вы хотите показать это описание?