如何在日历视图中选择两个日期

时间:2013-12-28 17:30:37

标签: android android-intent calendar

我正在尝试实现setOnDateChangeListener,目的是选择两个日期值(minDate和maxDate),然后使用Intent将此值发送到另一个活动。我应该以某种方式存储选择的第一个日期(比如minDate),然后在第二次点击(maxDate)之后获取第一个值并将两者作为数组发送,或者还有其他方法可以在日历中选择两个日期吗?

        calendar.setOnDateChangeListener(new OnDateChangeListener() {

        @Override
        public void onSelectedDayChange(CalendarView view, int year,
                int month, int dayOfMonth) {

            Toast.makeText(
                    getApplicationContext(),
                    dayOfMonth + "/" + month + "/" + year, Toast.LENGTH_LONG).show();

        }

    });

到目前为止我所拥有的是:

            @Override
        public void onSelectedDayChange(CalendarView view, int year,
                int month, int dayOfMonth) {

            Intent intent = new Intent(view.getContext(),
                    DisplayActivity.class);

            String year_month_dayOfMonth = String.valueOf(year) + "-"
                    + String.valueOf(month + 1) + "-"
                    + String.valueOf(dayOfMonth);

            intent.putExtra("date", year_month_dayOfMonth);

            startActivity(intent);



        }

    });

因此,当我点击日历日期时,它会触发DisplayActivity,并且只会触发一个意图携带的日期。问题仍然存在,如何选择两个日期并将其置于意图之中。

经过深入搜索后,我得出结论,日历中的日期范围只能与DatePicker一起完成。因此,我选择date然后调用DatePicker对话框并使用数据进行操作。有人可以确认我的结论是否正确。

已经达到以下解决方案:

            public void onSelectedDayChange(CalendarView view, int year,
                int month, int dayOfMonth) {

            int id = CalendarView.generateViewId();

            if ((id % 2) == 0) {

                end_date = calendar.getDate();

                Log.d(LOG_TAG, "End date: " + end_date + "and id = " + id);

            } else {

                start_date = calendar.getDate();

                Log.d(LOG_TAG, "Start date: " + start_date + "and id = "
                        + id);

            }

如果有人会分享更好的解决方案或样品会欣赏它。自Android开发新版以来,任何批评也绝对开放。

2 个答案:

答案 0 :(得分:1)

Android原生CalendarView不支持此功能。你可以使用我的库。它调用MFCalendarView

你可以突出显示这样的多个事件;

ArrayList<String> eventDays = new ArrayList<String>();
eventDays.add("2014-02-25");
eventDays.add(Util.getCurrentDate());

mf.setEvents(eventDays);

MFCalendarView有自己的监听器:

mf = (MFCalendarView) findViewById(R.id.mFCalendarView);
mf.setOnCalendarViewListener(new onMFCalendarViewListener() {

    @Override
        public void onDisplayedMonthChanged(int month, int year, String monthStr) {
            }

            @Override
            public void onDateChanged(String date) {
            }
    });

答案 1 :(得分:0)

经过仔细研究后我发现了CalendarView.generateViewId();不是一个好的解决方案,因为id被分配给整个应用程序生命周期。所以,我只是添加了两个按钮来获取最小和最大日期。不是优雅的解决方案,但没有在堆栈或其他任何地方找到任何其他。

        button.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            date = calendar.getDate();

            Log.d(LOG_TAG, "Date selected: " + date);

        }
    });

我仍然愿意接受任何其他建议或样本参考。