早上一上班发现Bugly上报错了。
报错信息显示是SwipeLayout类报的空指针异常。
SwipeLayout类是Android Swipe Layout项目的一个控件,实现了侧滑删除等效果,是一个非常实用的自定义控件。这么成熟的开源项目,不至于在我这里报个这么严重的异常啊,当时我就郁闷了。
查看报错信息SwipeLayout类的811行:
parent.requestDisallowInterceptTouchEvent(true);
这行代码只是让parent注册响应触摸事件。所以只有parent为空这一种可能,而parent则是SwipeLayout的父布局ViewParent。
在我们的项目中,SwipeLayout控件一般使用在ListView的Item中,对Item数据进行删除等操作。在Adapter的getView方法中,我们实例化convertView时,一般都会把convertView的ViewGroup设置为null。
convertView = View.inflate(context, R.layout.list_item, null);
而我们偏偏在list_item里将SwipeLayout控件设置成了根布局,所以当将SwipeLayout内部使用getParent()时得到的也是空指针。
Bug的解决办法就是将SwipeLayout控件的外面再套一层布局,不要作为item的根布局。