Open forEveryDay opened 6 years ago
简单来说setMarkData只能在初始化的时候使用,后续设置会造成界面切换问题
我觉得很多业务场景都是翻页的时候动态去标记的,而不是初始化的时候一次标记完,是我用的不对吗?
同上我也遇到了类似的问题,第二次 setMarkData 之后 调用 CalendarAdapter.notifyDataSetChanged() 界面日期并不会更新重新绘制,只有当点击日期之后 点 界面才会更新。
我也遇到这问题,就是翻页到下月或者上月,调用 private void initMarkData() { HashMap<String, CalendarRecordDomain> markData = new HashMap<>(); for (int i = 0; i < recordDomains.size(); i++) { //以时间为key值 markData.put(recordDomains.get(i).getDate(), recordDomains.get(i)); } calendarAdapter.setMarkData(markData); // calendarAdapter.notifyDataChanged(); } 日期从6月直接调到8月 晕死,数据我也找不到了 ,混乱了
我已经解决了这个问题,不要在 monthPager.addOnPageChangeListener的onPageSelected()中调用setMark数据,可以在首次的时候显示mark数据,当添加了数据,发送广播setMark(),这样就不至于月份混乱了
楼上还有这种操作
@itkun2013 朋友,我使用了广播也没能解决这个问题,你能详细说说你是如何解决的吗? @forEveryDay 楼主的这个问题解决了吗?
`` /**
添加或者删减日历成功后,广播接受,并刷新 */ public class AddCalTaskReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
DebugLog.d(LogUtil.DEBUGLOG + "ADD_CALENDAR_SUCCESS " + action);
if (action.equals(BroadcastConstant.ADD_CALENDAR_SUCCESS)) {
String byCalendar = getByCalendar(currentDate);
//日历下的数据
notifyData(byCalendar);
//更新日历上的标记数据
initMarkData();
}
}
} /**
这是本人的效果图
@itkun2013 很高兴看到你的解决方案,我看了代码之后,也找到了解决方法,就是请求到数据后setmarker,然后不要调用calendarAdapter.notifyDataChanged()方法,而是调用calendarAdapter.invalidateCurrentCalendar()方法,这样就可以实现无错乱更新日历的效果了,关注最后两行代码:
private void HttpRecord() {
map = new HashMap<>();
holidayMap = new HashMap<>();
HttpUtil.http(Constants.QUERY_ATTENDANCE_DETAIL + "?newMonth=" + time + "&userGid=" + userGid, null, new HttpCallBack
@WJ-Alien 你好,我这边是滑动日历时请求服务器一个月数据下来设置日历标记,第一次setMarkData是有效的,在滑动日历至其他月时第二次设置setMarkData和invalidateCurrentCalendar还是有错乱更新日历的效果。方便问下你那边除了invalidateCurrentCalendar,改了哪里的源码使得功能正常不?
@jackielia 直接使用这两行代码 Utils.setMarkData(markData); calendarAdapter.invalidateCurrentCalendar(); 不要用calendarAdapter.setMarkData(map);
楼上答案有效,在CalendarViewAdapter类,修改setMarkData方法, 原:Utils.setMarkData(markData); notifyDataChanged();
改为:Utils.setMarkData(markData); invalidateCurrentCalendar();
@jackielia 直接使用这两行代码 Utils.setMarkData(markData); calendarAdapter.invalidateCurrentCalendar(); 不要用calendarAdapter.setMarkData(map);
也解决了我的问题,感谢
例如: 即,动态翻页的时候动态添加,滑动的页面对不上,可能停在某一个页面上面