Caldroid 的可绘制背景
Background drawable for Caldroid
您好,我正在使用 Caldroid 库在我的习惯跟踪器应用程序中自定义日历视图,并且有两个散列图 successMap
和 failureMap
代表一个习惯的成功和失败天数。
我为成功的日子设置绿色圆形背景可绘制,为失败的日子设置红色圆形背景可绘制,但只显示其中一个,稍后在代码中编写。
这是设置日历的方法:
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();
}
在此仅显示稍后写入的日期,例如此处仅失败的日期 shown.I 已检查这些数组列表和映射值,它们是 fine.So 我如何解决此问题?
检查 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();
}
您好,我正在使用 Caldroid 库在我的习惯跟踪器应用程序中自定义日历视图,并且有两个散列图 successMap
和 failureMap
代表一个习惯的成功和失败天数。
我为成功的日子设置绿色圆形背景可绘制,为失败的日子设置红色圆形背景可绘制,但只显示其中一个,稍后在代码中编写。
这是设置日历的方法:
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();
}
在此仅显示稍后写入的日期,例如此处仅失败的日期 shown.I 已检查这些数组列表和映射值,它们是 fine.So 我如何解决此问题?
检查 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();
}