出现这个问题的原因很多,这里主要针对个人遇到的问题进行整理,今后如发现更多遭遇会继续补充。
首先上面的日志报出来 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);
特写此博客记录踩过的坑。
异常信息:java.lang.IllegalArgumentException: parameter must be a descendant of this view错误原因:发生这个错误主要是ListView或者其它ViewGroup等容器控件因为滑动而暂时移除子View,但却没有移除该子View上面的焦点Focus,所以在ListView滑动返回到原来的位置的时候没有恢复成原来的View,导致
异常出现情况:
mLayoutMap为布局view的集合,如当前view为view1可见visible,正常情况view2、view3、view4...为不可见gone,当点击tab2(让view2显示)时抛出上面的异常。
分析以及解决方案:
parameter must be a descendant of this view言外之意所有view必须嵌套
最近的一系列源码分析,都是基于一个错误,逐步深入源码。都是网上没有源码分析的报错,这个报错也是。
网络上有文章给出了有针对性的解决方案。我通过源码给出更普通的解决思路,这个问题,没有特定的解决方案,所以只能领会精髓后,随机应变。
下面分析是通过一个具体问题,展开源码的分析,所以不必太在意业务场景的相似,重在领会精髓
我的具体场景是,在从某一个界面跳转到登录界面时,点击输入框EditTe...
java.lang.IllegalArgumentException: parameter must be a descendant of this view
at android.view.ViewGroup.offsetRectBetweenParentAndChild(ViewGroup.java:5335)
at android.view.ViewGroup.offsetDesce
bug信息:
10-16 17:27:20.250: D/AndroidRuntime(14662): Shutting down VM
10-16 17:27:20.250: W/dalvikvm(14662): threadid=1: thread exiting with uncaught exception (group=0x40a5e228)
10-16 17:27:20.250:
异常信息
大致的异常信息如下:
java.lang.IllegalArgumentException: parameter must be a descendant of this view
E/DEBUG: at android.view.ViewGroup.offsetRectBetweenParentAndChild(ViewGroup.java:6376)
at android.view.ViewGroup.offsetDescendantRectToMyCoords(ViewGro
http://www.cnblogs.com/monodin/p/3675040.html
关于ViewFlow和GridView嵌套导致Parameter
must be a descendant ofthis view问题的解决方案
【关于ViewFlow】
ViewFlow是一款基于ViewGroup实现的可以水平滑动的开源UI Widget,可以从htt