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

Android中Material Calendar View无法移除未选中日期的问题求助

解决Material Calendar View取消选中日期时从数组移除的问题

嘿,这事儿其实很简单,你手里的selected变量就是关键!它会告诉你当前操作是选中(true)还是取消选中(false)这个日期,咱们直接针对这个状态来修改数组就好。

先说说你原来代码里的小问题:你每次触发回调都循环所有选中日期并添加当前date的day,这会导致数组里重复添加数据,而且完全没处理取消选中的情况。咱们调整一下逻辑:

  1. 当selected为true时,把当前选中日期的day添加到数组
  2. 当selected为false时,把当前取消选中日期的day从数组里移除

修改后的onDateSelected方法代码如下:

materialCalendarView.setOnDateChangedListener(new OnDateSelectedListener() {
    @Override
    public void onDateSelected(@NonNull final MaterialCalendarView widget, @NonNull final CalendarDay date, final boolean selected) {
        Integer selectedDay = date.getDay();
        if (selected) {
            // 选中日期:添加到数组
            if (!my_Dates1.contains(selectedDay)) { // 可选:避免重复添加(如果用户重复点击同一个选中的日期)
                my_Dates1.add(selectedDay);
            }
        } else {
            // 取消选中:从数组移除
            my_Dates1.remove(selectedDay);
        }
        Log.e("Datess", String.valueOf(my_Dates1));
    }
});

补充说明:

  • 这里直接用当前回调的date来获取day,不用遍历所有选中日期,因为每次回调只对应一个被操作的日期,这样更高效。
  • 加了!my_Dates1.contains(selectedDay)的判断是为了防止用户重复点击已经选中的日期时,数组里重复添加同一个day,如果你不需要这个判断也可以去掉,不过加上更稳妥。
  • 注意my_Dates1如果是ArrayList<Integer>的话,remove(Integer)方法会移除第一个匹配的元素,完全符合咱们的需求。

这样调整后,数组就会和日历的选中状态完全同步啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:44:53