devaige / DatePicker

Useful and powerful date picker for android
Apache License 2.0
1.86k stars 414 forks source link

高级定制中设置背景图功能,bug建议修改 #40

Closed DeesonWoo closed 8 years ago

DeesonWoo commented 8 years ago

我在使用您的这个项目时遇到一个bug,就是在动态修改特定的日期的显示标识时,会出现无法修改的情况: 比如

1.首先我用如下代码首次设置 List tmp = new ArrayList<>(); tmp.add("2016-10-21"); tmp.add("2016-10-22"); DPCManager.getInstance().setDecorBG(tmp); “2016-10-21”和“2016-10-22”两天显示我绘制的红色背景,控件正常显示;

2.接着我再用同样的代码设置新的日期 List tmp = new ArrayList<>(); tmp.add("2016-10-23"); tmp.add("2016-10-24"); DPCManager.getInstance().setDecorBG(tmp); 结果还是“2016-10-21”和“2016-10-22”这两天显示红色的背景。

于是乎,我自己在您的源代码中增加了几行代码(清空旧数据): 在DPCManager类中的setDecor(List date, HashMap<String, Set> cache)方法里面增加如下几行代码: private void setDecor(List date, HashMap<String, Set> cache) {

    //清空原来的数据
    DATE_CACHE.clear();
    DECOR_CACHE_BG.clear();
    DECOR_CACHE_TL.clear();
    DECOR_CACHE_T.clear();
    DECOR_CACHE_TR.clear();
    DECOR_CACHE_L.clear();
    DECOR_CACHE_R.clear();

    for (String str : date) {
        int index = str.lastIndexOf("-");
        String key = str.substring(0, index).replace("-", ":");
        Set<String> days = cache.get(key);
        if (null == days) {
            days = new HashSet<>();
        }
        days.add(str.substring(index + 1, str.length()));
        cache.put(key, days);
    }
}

结果,问题得到了解决。希望对您有帮助。

devaige commented 8 years ago

这个问题很早的issue里就提到过了、因为这个控件的初衷是做日期选择,因此其数据是全局管理的,很多朋友使用的时候动态改变一些参数,因为全局数据缓存的问题而无法更改,所以只能清空缓存,属于该控件设计之初的考虑欠周吧

DeesonWoo commented 8 years ago

恩,谢谢您的回答。