相关疑难解决方法(0)

防止/捕获"IllegalArgumentException:参数必须是此视图的后代"错误

我有一个ListView,里面有一些可聚焦的组件(主要是EditTexts).是的,我知道这不是完全推荐的,但总的来说,几乎所有东西都工作正常,重点放在必须去的地方(我需要进行一些调整代码).无论如何,我的问题是,当用手指滚动列表然后在显示IME键盘时突然使用轨迹球,存在一种奇怪的竞争条件.有些东西必须超出范围并得到回收,此时该offsetRectBetweenParentAndChild()方法必须启动并抛出IllegalArgumentException.

问题是这个异常被抛出我可以插入try/catch的任何块之外(据我所知).所以这个问题有两个有效的解决方案:

  1. 有人知道为什么抛出这个异常以及如何阻止它发生
  2. 有人知道如何在某个地方放置一个try/catch块,至少让我的应用程序存活下来.据我所知,问题是焦点,所以它绝对不应该杀死我的应用程序(这是它正在做的).我尝试重写了ViewGroup这些方法,但这两种offset*方法被标记为final.

堆栈跟踪:

08-17 18:23:09.825: ERROR/AndroidRuntime(1608): FATAL EXCEPTION: main
08-17 18:23:09.825: ERROR/AndroidRuntime(1608): java.lang.IllegalArgumentException: parameter must be a descendant of this view
08-17 18:23:09.825: ERROR/AndroidRuntime(1608):     at android.view.ViewGroup.offsetRectBetweenParentAndChild(ViewGroup.java:2633)
08-17 18:23:09.825: ERROR/AndroidRuntime(1608):     at android.view.ViewGroup.offsetDescendantRectToMyCoords(ViewGroup.java:2570)
08-17 18:23:09.825: ERROR/AndroidRuntime(1608):     at android.view.ViewRoot.scrollToRectOrFocus(ViewRoot.java:1624)
08-17 18:23:09.825: ERROR/AndroidRuntime(1608):     at android.view.ViewRoot.draw(ViewRoot.java:1357)
08-17 18:23:09.825: ERROR/AndroidRuntime(1608):     at android.view.ViewRoot.performTraversals(ViewRoot.java:1258)
08-17 18:23:09.825: ERROR/AndroidRuntime(1608):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1859)
08-17 18:23:09.825: ERROR/AndroidRuntime(1608):     at android.os.Handler.dispatchMessage(Handler.java:99)
08-17 18:23:09.825: ERROR/AndroidRuntime(1608):     at android.os.Looper.loop(Looper.java:130)
08-17 …
Run Code Online (Sandbox Code Playgroud)

android illegalargumentexception viewgroup viewroot

54
推荐指数
8
解决办法
3万
查看次数