java - 如何在 alamkanak 周 View 中添加事件

标签 java android android-library android-calendar

我正在使用alam kanak week view在我的应用程序中。我有一个 Activity ,我知道日期、开始时间和结束时间。现在调用什么函数来将此事件添加到周 View 中。假设我的日期是 2015 年 10 月 20 日,时间是 17:30 到 18:30。 我无法将此事件添加到 View 中。有的话请提供。

这就是 Alam-Kanak 添加事件的方式:

Calendar startTime = Calendar.getInstance();
        startTime.set(Calendar.HOUR_OF_DAY, 5);
        startTime.set(Calendar.MINUTE, 0);
        startTime.set(Calendar.MONTH, newMonth-1);
        startTime.set(Calendar.YEAR, newYear);
        startTime.add(Calendar.DATE, 1);
        Calendar endTime = (Calendar) startTime.clone();
        endTime.add(Calendar.HOUR_OF_DAY, 3);
        endTime.set(Calendar.MONTH, newMonth - 1);
        WeekViewEvent event = new WeekViewEvent(3, "Test title", startTime, endTime);
        event.setColor(getResources().getColor(R.color.event_color_03));
        CommonItems.events.add(event);

此事件出现。 这是我从服务器收到的针对自定义事件的响应:

{ "error": false, "appointments": [ { "id": "1", "staff_id": null, "technician_id": "1", "name": "Test", "address": "Vijayanagar", "pincode": "580040", "mobile": "9876543210", "email": "test@gmail.com", "date": "2015-09-22", "time": "16:30:00", "latitude": null, "longitude": null, "status": "open", "created_at": "2015-09-06 18:04:47", "updated_at": null } ] }

这就是我添加事件的方式:

try {
            JSONObject jo = new JSONObject(response);
            JSONArray ja = jo.getJSONArray("appointments");
            for (int i = 0; i < ja.length(); i++) {
                JSONObject index = ja.getJSONObject(i);

                String name = index.getString("name"); 

                String date = index.getString("date");
                String[] dateSplit = date.split("-");
                int date_year = Integer.parseInt(dateSplit[0]);
                int date_month = Integer.parseInt(dateSplit[1]);
                int date_day = Integer.parseInt(dateSplit[2]);

                String time = index.getString("time");
                String[] timeSplit = time.split(":");
                int time_hour = Integer.parseInt(timeSplit[0]);
                int time_minute = Integer.parseInt(timeSplit[1]);

                Calendar startTime = Calendar.getInstance();
                startTime.set(Calendar.HOUR_OF_DAY, 4);
                startTime.set(Calendar.MINUTE, time_minute);
                startTime.set(Calendar.DATE, date_day);
                startTime.set(Calendar.MONTH, date_month);
                startTime.set(Calendar.YEAR, date_year);
                Calendar endTime = (Calendar) startTime.clone();
                endTime.set(Calendar.HOUR_OF_DAY, 4+1);
                endTime.set(Calendar.MINUTE, time_minute);

                WeekViewEvent event = new WeekViewEvent(1, name, startTime, endTime);
                event.setColor(getResources().getColor(R.color.event_color_01));

                CommonItems.events.add(event);

            }

        } catch (JSONException e) {
            // TODO Auto-generated catch block

            e.printStackTrace();
        }

这不会出现。!我无法理解出了什么问题。请帮忙。

最佳答案

我通过对库进行一点点更改来做到了这一点:

更改onSingleTapConfirmed@Override方法:

 @Override
    public boolean onSingleTapConfirmed(MotionEvent e) {

        if (mEventClickListener != null) {
             boolean didSelect = false;
             if (mEventRects != null) {
             List<EventRect> reversedEventRects = mEventRects;
             Collections.reverse(reversedEventRects);

              for (EventRect event : reversedEventRects) {
                        if (event.rectF != null && e.getX() > event.rectF.left
                                                && e.getX() < event.rectF.right
                                                && e.getY() > event.rectF.top
                                                && e.getY() < event.rectF.bottom) {
                                            mEventClickListener.onEventClick(
                                                    event.originalEvent, event.rectF);
                                            playSoundEffect(SoundEffectConstants.CLICK);
                                            didSelect = true;
                                            break;
                                        }
                                    }
                                }
                                if (!didSelect) {
                                    int day_1 = mFirstVisibleDay.get(Calendar.DAY_OF_YEAR);
                                    int day_2 = mLastVisibleDay.get(Calendar.DAY_OF_YEAR);

                                    int chosen_day;

                                    if (day_1 != day_2) {
                                        chosen_day = (int) (day_1 - 1 + Math.round((e.getX()  - mHeaderColumnPadding - (mNumberOfVisibleDays-1)*mColumnGap - mTextSize)
                                                / mWidthPerDay));
                                    } else {
                                        chosen_day = day_1;
                                    }

                                    Calendar RETCAL = Calendar.getInstance();

                                    RETCAL.setTime(mFirstVisibleDay.getTime());

                                    // int totalY = mScroller

                                    int chosen_hour = Math.max(Math.min((int) Math.round((e.getY() - mHeaderTextHeight - mHeaderRowPadding  - mHeaderMarginBottom - mScroller
                                            .getCurrY()) / mHourHeight),23),0);


                                    RETCAL.set(Calendar.DAY_OF_YEAR, chosen_day);
                                    RETCAL.set(Calendar.HOUR_OF_DAY, chosen_hour-1);
                                    RETCAL.set(Calendar.MINUTE, 0);
                                    mEventClickListener.onNonEventSingleTap(RETCAL);


                                }

                            }
          return super.onSingleTapConfirmed(e);
    }

EventClickListener 界面如下所示:

public interface EventClickListener {
       public void onEventClick(WeekViewEvent event, RectF eventRect);
       public void onNonEventSingleTap(Calendar cal);
  }

现在您将在ActivityFragment类中获得Calendar对象:

@Override
    public void onNonEventSingleTap(Calendar cal) {
      // User cal object as Calendar
    }

希望这对您有帮助。

关于java - 如何在 alamkanak 周 View 中添加事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32970830/

相关文章:

java - android.support.v7.widget.AppCompatTextView 无法转换为 android.widget.RelativeLayout

java - 在 java 和 JSON 中编码希伯来语

java - 如何从另一个 JtextField 更新 JTextField

java - android 获取 android 库上下文与应用程序上下文

android - 是否可以在运行时从 Android 应用程序动态加载库?

Android AAR Artifact 发布在组装之前执行

Java - 将用户输入分配给变量/更改计数器

java - Android SDK 管理器无法打开

android - 覆盖点击android preferenceactivity

c# - Kindle Fire 视频流式传输崩溃