MagicMashRoom / SuperCalendar

@Deprecated android 自定义日历控件 支持左右无限滑动 周月切换 标记日期显示 自定义显示效果跳转到指定日期
2.76k stars 484 forks source link

异步加载日历标记问题 #96

Closed shimiso closed 6 years ago

shimiso commented 6 years ago

日历视图是在每次滑动切换月份的时候就开始重绘了,如果标记calendarAdapter.setMarkData(markData);是异步的,会计较麻烦,会导致标记还没有加载完整个日历就绘制完了, 为了解决这个问题,在刚进入时候就先加载3个月缓存起来,目前暂时没想到更好的办法,想做成每次滑动异步更新标记

MagicMashRoom commented 6 years ago

可以 你可以按照这个想法完成 提一个PR

kscMaster commented 6 years ago

它让我在紧张的3日演示Demo最终以假数据填充而告终,我想,这个问题只能做成异步的合理,如果做成在进入软件就预先加载,很多功能就无法完成了。

MagicMashRoom commented 6 years ago

如果是异步加载的标记 需要在setMarkData之后 calendarViewAdapter.notifyDataChanged

kscMaster commented 6 years ago

这是我异步加载完成后的代码:

public void showTimeSucc(List listEvent) { markData = new ArrayList<>(); for (int i = 0; i < listEvent.size(); i++) { markData.add(ConvertUtils.transferLongToDate(Constant.YYYY_MM_DD, Long.parseLong(listEvent.get(i).getEventTime()))); // 时间集 } if (markData != null) calendarAdapter.setMarkData(markData); calendarAdapter.notifyDataChanged(currentDate); mp_pager.setAdapter(calendarAdapter); }

但是走完这一步,日历一片空白

MagicMashRoom commented 6 years ago

改好了

kscMaster commented 6 years ago

ok,异步执行的方法: @Override public void showMonthCalendar() { markData = new HashMap<>(); // 指定有Date的日期 markData.put("2017-12-7", Constant.CALENDAR); markData.put("2017-12-8", Constant.CALENDAR); markData.put("2017-12-9", Constant.CALENDAR); markData.put("2017-12-10", Constant.CALENDAR); markData.put("2017-12-14", Constant.CALENDAR); calendarAdapter.setMarkData(markData); calendarAdapter.notifyDataChanged(currentDate); }

shimiso commented 6 years ago

@MagicMashRoom 厉害啊,我也赶紧更新

kscMaster commented 6 years ago

事实上我看源码了,感觉无从下手,代码层次有些高