Android中Material Calendar View无法移除未选中日期的问题求助
解决Material Calendar View取消选中日期时从数组移除的问题
嘿,这事儿其实很简单,你手里的selected变量就是关键!它会告诉你当前操作是选中(true)还是取消选中(false)这个日期,咱们直接针对这个状态来修改数组就好。
先说说你原来代码里的小问题:你每次触发回调都循环所有选中日期并添加当前date的day,这会导致数组里重复添加数据,而且完全没处理取消选中的情况。咱们调整一下逻辑:
- 当
selected为true时,把当前选中日期的day添加到数组 - 当
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
相关产品推荐
相关产品推荐

