Как добавить данные в события в applandeo calenderView?

Существует очень хорошая библиотека (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)); 

где вы хотите показать это описание?

Nikunj Paradva 20.05.2019 13:53

Я хочу показать это описание в новом диалоговом окне, когда пользователь нажимает дату события.

Shikhar 20.05.2019 13:55
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
2
2 681
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Сначала создайте собственный класс

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()

Shikhar 21.05.2019 06:42

Это работает для меня, настройте в соответствии с вашими требованиями

Nikunj Paradva 21.05.2019 06:59

я преобразовал рисование в растровое изображение, и написал в посылку, а не работает! ... Большое спасибо, брат, ты спасатель жизни ... не могли бы вы также немного объяснить свой код ... как я понял, вы расширили оригинал класс в пользовательском классе, чтобы наследовать его функции, но почему вы реализовали Parcelable? ...в любом случае еще раз спасибо :)

Shikhar 21.05.2019 07:10

Я просто взял код из Google, и он работает для меня, ссылка здесь applandeo.com/blog/…, пожалуйста, проверьте ее.

Nikunj Paradva 21.05.2019 07:14

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

  1. Заявлено: Map<Date,String> eventNotes = new HashMap<>()
  2. При обновлении событий календаря для каждой даты заполнил eventNotes необходимыми заметками и датой в качестве ключа.
  3. В календаре setOnDayClickListener получено eventNote с помощью ключа eventDay.getCalendar().getTime()
  4. Затем использовал всплывающее диалоговое окно, чтобы показать эту заметку

Другие вопросы по теме