Android-Week-View异步加载事件每周

时间:2016-08-20 22:02:34

标签: java android android-layout

首先,我正在使用图书馆https://github.com/alamkanak/Android-Week-View

我有一个API,一次返回一周的数据。

例如GET / stuff / {current_week_number}

然后设置滚动侦听器,检查周是否已更改,然后加载

GET / stuff / {new_week_number}

问题是所有事件都将在当前周位置作为重复项。我知道图书馆每个月都需要活动,这是问题吗?

现在已经调试了一天,非常感谢帮助。

创建活动的功能:

private WeekViewEvent createNew(JSONObject json, int week) {
        String eventTitle = "";
        String colorString = "#999";
        String startTimeString = "";
        String endTimeString = "";
        int dayOfWeek = 0;

        try {
            eventTitle = json.getString("text").replaceAll("\n", " ");
            colorString = json.getString("color");
            startTimeString = json.getString("startTime");
            endTimeString = json.getString("endTime");
            dayOfWeek = json.getInt("day");
        } catch (JSONException e) {
            e.printStackTrace();
        }

        Calendar startTime = Calendar.getInstance();
        startTime.set(Calendar.HOUR_OF_DAY, hoursFromString(startTimeString));
        startTime.set(Calendar.MINUTE, minutesFromString(startTimeString));
        startTime.set(Calendar.WEEK_OF_YEAR, week);
        startTime.set(Calendar.DAY_OF_WEEK, dayOfWeek);

        Calendar endTime = (Calendar) startTime.clone();
        endTime.set(Calendar.HOUR_OF_DAY, hoursFromString(endTimeString));
        endTime.set(Calendar.MINUTE, minutesFromString(endTimeString));

        WeekViewEvent event = new WeekViewEvent(mGlobalCounter, eventTitle, startTimeString + " - " + endTimeString, startTime, endTime);
        event.setColor(Color.parseColor(colorString));

        if (event.getColor() == Color.WHITE) {
            event.setColor(R.color.event_color_01);
        }
        return event;
    }

月改变侦听器+辅助方法(来自示例)

private boolean eventMatches(WeekViewEvent event, int year, int month) {
        return (event.getStartTime().get(Calendar.YEAR) == year && event.getStartTime().get(Calendar.MONTH) == month - 1) || (event.getEndTime().get(Calendar.YEAR) == year && event.getEndTime().get(Calendar.MONTH) == month - 1);
    }

MonthLoader.MonthChangeListener mMonthChangeListener = new MonthLoader.MonthChangeListener() {
    @Override
    public List<WeekViewEvent> onMonthChange(int newYear, int newMonth) {
        // Populate the week view with some events.
        List<WeekViewEvent> events = new ArrayList<>(); //getEvents(newYear, newMonth);


            for (WeekViewEvent event : mNewEvents) {
                if (eventMatches(event, newYear, newMonth)) {
                    events.add(event);
                }
            }

            mFetchedWeeks.add(Integer.valueOf(mWeek));

        return events;
    }
};

这是来自API的JSON响应 https://gist.github.com/jonathanort/668de267966e3b673fffe23dfbdfb90b

另外,我修改了WeekView.java版本 https://gist.github.com/jonathanort/472d86355dcdbc338f13373a838f548a

1 个答案:

答案 0 :(得分:0)

解决方案是添加行

    startTime.get(Calendar.DAY_OF_WEEK);

  startTime.set(Calendar.DAY_OF_WEEK, dayOfWeek);

显然它不会设置这一天