CalendarView 中在 onAttachWindow 执行初始化可能导致后续操作 NPE
源码中存在:
https://github.com/huanghaibin-dev/CalendarView/blob/65f747a564c6a7d8b1fc489ca6cac42c9f002be0/calendarview/src/main/java/com/haibin/calendarview/CalendarView.java#L1200-L1210
View 只会在 Activity/Fragment 执行到 onResume 的时候回调 onAttachedToWindow 并执行绘制操作。所以对于自行控制 Fragment 生命周期的情况下,可能导致 NPE 异常。
-
onCreate执行网络请求 -
Fragment不可见,不执行onResume。故而子 View 亦不会被回调onAttachedToWindow -
CalendarView的onAttachedToWindow对mParent的赋值操作不会被执行。
此时调用任何操作 mParent 属性的方法,都将导致 NPE 异常。比如 com.haibin.calendarview.CalendarView#setRange :
https://github.com/huanghaibin-dev/CalendarView/blob/65f747a564c6a7d8b1fc489ca6cac42c9f002be0/calendarview/src/main/java/com/haibin/calendarview/CalendarView.java#L248-L267
里面的 mWeekPager.updateRange():
https://github.com/huanghaibin-dev/CalendarView/blob/65f747a564c6a7d8b1fc489ca6cac42c9f002be0/calendarview/src/main/java/com/haibin/calendarview/WeekViewPager.java#L151-L171
会有mParentLayout.updateSelectWeek(i); 调用。
是不是可以直接在 CalendarView 创建的时候直接获取 mParentLayout?