java - Caldroid 的背景绘制

标签 java android calendarview caldroid

您好,我正在使用 Caldroid 库在我的习惯跟踪器应用程序中自定义日历 View ,并且有两个 HashMap successMapfailureMap 代表习惯的成功和失败的日子。 我正在为成功的日子设置可绘制的绿色圆形背景,为失败的日子设置可绘制的红色圆形背景,但仅显示其中之一,稍后在代码中编写。 这是设置日历的方法:

private void setCalendar(){
    Map<Date, Drawable> successMap = new HashMap<>();
    Map<Date, Drawable> failureMap = new HashMap<>();
    //For success days
    for(int i=0; i<successDays.size(); i++){
        successMap.put(successDays.get(i), getResources().getDrawable(R.drawable.green_circular));
    }
    //For failure days
    for(int i=0; i<failureDays.size(); i++){
        failureMap.put(failureDays.get(i), getResources().getDrawable(R.drawable.red_circular));
    }
    caldroidFragment.setBackgroundDrawableForDates(successMap);
    caldroidFragment.setBackgroundDrawableForDates(failureMap);
    caldroidFragment.refreshView();
}

仅显示日期,稍后写入,例如这里仅显示失败的日期。我已经检查了这些数组列表和映射值,它们都很好。那么我该如何解决这个问题?

最佳答案

检查 Caldroid 库后,我发现每次调用 setBackgroundDrawableForDates() 时,该库都会清除以前的列表

public void setBackgroundDrawableForDates(
        Map<Date, Drawable> backgroundForDateMap) {
    if (backgroundForDateMap == null || backgroundForDateMap.size() == 0) {
        return;
    }

    backgroundForDateTimeMap.clear();

    for (Date date : backgroundForDateMap.keySet()) {
        Drawable drawable = backgroundForDateMap.get(date);
        DateTime dateTime = CalendarHelper.convertDateToDateTime(date);
        backgroundForDateTimeMap.put(dateTime, drawable);
    }
}

因此,问题的解决方案是将两个列表附加在一起并仅调用一次 setBackgroundDrawableForDates() 以避免重置 就这样

private void setCalendar(){
        Map<Date, Drawable> successMap = new HashMap<>();
        Map<Date, Drawable> failureMap = new HashMap<>();
        //For success days
        for(int i=0; i<successDays.size(); i++){
            successMap.put(successDays.get(i), getResources().getDrawable(R.drawable.green_circular));
        }
        //For failure days
        for(int i=0; i<failureDays.size(); i++){
            failureMap.put(failureDays.get(i), getResources().getDrawable(R.drawable.red_circular));
        }
        successMap.putAll(failureMap);
        caldroidFragment.setBackgroundDrawableForDates(successMap);
        caldroidFragment.refreshView();
    }

关于java - Caldroid 的背景绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41074620/

相关文章:

java - println 的 Junit 测试

android - shadowOffset 在 react native android 中不起作用

java - Android Web 服务客户端 (JSON)

Android 权限 - Manifest 或 android.manifest

java - 有什么方法可以检测 android 日历 View 中的月份变化(即当用户将日历更改为另一个月份时)

java - 尝试调用 CXF/SOAP web 服务时出现 LinkageError

java - GPS 位置和本地时间

java - 如何从 calendarView() onCreate 获取具有特定格式的日期,例如日/月/年?

java - 使用 MaterialCalendarView

java - 同一 Intent 的显式和隐式形式