0

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

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)

有什么方法可以优雅地处理这个异常并防止强制关闭?我无法重现该问题。

我发现这个谷歌线程是关于它是甜甜圈(1.5)的一个问题,它已被修复。但我是从使用更高版本 Android 的用户那里得到的。我的最小 API 是 1.6,目标是 2.2。

4

2 回答 2

0

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

于 2011-05-26T20:51:00.920 回答
0

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

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

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

于 2014-07-30T04:52:23.063 回答