You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Android Material CalendarView的setOnDateChangedListener仅响应特定日期?

解决Material CalendarView仅响应周六周日点击的问题

嘿,这个需求实现起来很简单,核心思路就是在setOnDateChangedListener的回调里先判断选中日期是周六还是周日,再决定是否启动Intent。下面给你两种常见的实现方式:

方式一:使用Java 8+的LocalDate(推荐)

这种方式代码更清晰易读,利用Java的LocalDate和DayOfWeek枚举来判断星期:

materialCalendarView.setOnDateChangedListener((widget, selectedDate, isSelected) -> {
    // 将CalendarDay转换为LocalDate
    LocalDate localDate = selectedDate.toLocalDate();
    DayOfWeek day = localDate.getDayOfWeek();

    // 判断是否是周六或周日
    if (day == DayOfWeek.SATURDAY || day == DayOfWeek.SUNDAY) {
        // 在这里启动你的目标Activity
        Intent intent = new Intent(this, YourTargetActivity.class);
        // 可选:传递选中的日期数据
        intent.putExtra("SELECTED_DATE", selectedDate);
        startActivity(intent);
    }
    // 非周六周日的情况,直接什么都不做
});

方式二:使用传统Calendar类

如果你的项目还在使用旧版Java,也可以用Calendar类来判断:

materialCalendarView.setOnDateChangedListener(new OnDateChangedListener() {
    @Override
    public void onDateChanged(@NonNull MaterialCalendarView widget, @NonNull CalendarDay date, boolean selected) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date.getDate());
        int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);

        // Calendar类中,SUNDAY是1,SATURDAY是7
        if (dayOfWeek == Calendar.SATURDAY || dayOfWeek == Calendar.SUNDAY) {
            Intent intent = new Intent(YourCurrentActivity.this, YourTargetActivity.class);
            startActivity(intent);
        }
    }
});

额外提示

  • 如果需要区分用户是选中还是取消选中日期,可以结合回调里的isSelected参数调整逻辑,比如只有当isSelected为true时才处理。
  • 记得替换代码中的YourTargetActivity为你实际要启动的Activity类名。

内容的提问来源于stack exchange,提问作者matQ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:33:14