【问题标题】:How to add data to events in applandeo calenderView?如何将数据添加到 applandeo 日历视图中的事件?
【发布时间】:2019-05-20 11:47:41
【问题描述】:

有一个非常好的库(https://github.com/Applandeo/Material-Calendar-View)用于自定义 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)); 

【问题讨论】:

  • 您想在哪里显示该描述?
  • 当用户点击事件日期时,我想在新对话框中显示该描述

标签: java android android-library android-calendar calendarview


【解决方案1】:

首先创建一个自定义类

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() 无法识别,(悬停错误显示为“无法解析方法”)。 .it 认为它应该是原始 EventDay 类中的 getImageDrawable(),但是由于 parcel.writeInt() 会出现转换错误
  • 它适合我,根据您的要求定制
  • 我将drawable转换为位图,写入parcel而不是它的工作!......非常感谢兄弟,你是一个救生员......你能否也请解释一下你的代码。 . 就像我理解你在自定义类中扩展了原始类以继承它的特性但是你为什么要实现 Parcelable ? ...无论如何,再次感谢:)
  • 我只是从谷歌获取代码及其为我工作,链接在这里applandeo.com/blog/…请检查它
【解决方案2】:

当用户点击任何日期时,我使用此方法显示小弹出注释。

  1. 声明:Map&lt;Date,String&gt; eventNotes = new HashMap&lt;&gt;()
  2. 在更新每个日期的日历事件时,使用所需的注释和日期作为键填充 eventNotes
  3. 在日历中setOnDayClickListener 使用密钥eventDay.getCalendar().getTime() 检索到eventNote
  4. 然后使用弹出对话框显示该注释

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多