ViewGroup异常:参数必须是此视图的后代

时间:2011-05-09 01:59:16

标签: android viewgroup

我正在查看用户的异常日志,并发现了这个常见的异常:

java.lang.IllegalArgumentException: parameter must be a descendant of this view
   at android.view.ViewGroup.offsetRectBetweenParentAndChild(ViewGroup.java:2521)
   at android.view.FocusFinder.findNearestTouchable(FocusFinder.java:411)
   at android.view.ViewRoot.handleMessage(ViewRoot.java:1746)
   at android.os.Handler.dispatchMessage(Handler.java:99)
   at android.os.Looper.loop(Looper.java:123)
   at android.app.ActivityThread.main(ActivityThread.java:4363)
   at java.lang.reflect.Method.invokeNative(Native Method)
   at java.lang.reflect.Method.invoke(Method.java:521)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
   at dalvik.system.NativeStart.main(Native Method)

是否有某种方法可以优雅地处理此异常并阻止强制关闭?我无法重现这个问题。

I found this Google thread关于它是甜甜圈(1.5)的问题并且它已修复。但我从使用更高版本Android的用户那里得到了这个。我的最小API为1.6,目标为2.2。

2 个答案:

答案 0 :(得分:0)

我的猜测:可能是offsetDescendantRectToMyCoords()试图获取一个大孩子的坐标,即:它正在寻找的孩子不是视图组调用者的直接后代。

答案 1 :(得分:0)

我刚刚遇到了类似的问题。

我发现findFocus()返回的内容不是rootView的子代或后代。

因此,如果indexOfChild()返回-1,我只需将null作为第二个参数(聚焦)传递给FocusFinder的findNextFocus()。