我正在查看用户的异常日志,并发现了这个常见的异常:
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。
答案 0 :(得分:0)
我的猜测:可能是offsetDescendantRectToMyCoords()试图获取一个大孩子的坐标,即:它正在寻找的孩子不是视图组调用者的直接后代。
答案 1 :(得分:0)
我刚刚遇到了类似的问题。
我发现findFocus()返回的内容不是rootView的子代或后代。
因此,如果indexOfChild()返回-1,我只需将null作为第二个参数(聚焦)传递给FocusFinder的findNextFocus()。