出现这个问题的原因很多,这里主要针对个人遇到的问题进行整理,今后如发现更多遭遇会继续补充。
首先上面的日志报出来 The Observer is null 这尼玛什么问题。我们看到异常的第三行,
显示
BaseAdapter.unregisterDataSetObserver这个方法,但是看了下代码,我使用的是RecycleView跟BaseAdapter有什么关系。于是乎我百度了一下,发现百度给的方法是:
@Override
public void unregisterDataSetObserver(DataSetObserver observer) {
if (observer != null) {
super.unregisterDataSetObserver(observer);
}
}
在adapter中去覆盖这个方法,并做一个入参判空的操作,我按照网上的去试了试,运行程序还是崩溃。还是报这个问题。
找了很多地方都没发现什么特别的,看了下项目中其他用RecycleView的地方也没报错啊。
最后找了很久发现,原来我的RecycleView中嵌套了GrideView
注意:
调用onDetachedFromWindow();会把observer设置成null所以当第二次重用的时候在remove view时就会再次的调用onDetachedFromWindow();就会出现上边的那个错误;
所以我在GrideView中重写了下面这个方法并判空,问题就修复了。
@Override
public void unregisterDataSetObserver(DataSetObserver observer) {
if (observer != null) {
super.unregisterDataSetObserver(observer);
}
}
特写此博客记录踩过的坑。