CalendarView
CalendarView copied to clipboard
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
?