Предотвращение / перехват исключения «IllegalArgumentException: параметр должен быть потомком этого представления» ”Ошибка

У меня есть ListView с некоторыми компонентами, на которые можно сфокусироваться (в основном EditText с). Да, я знаю, что это не совсем рекомендуется, но в целом почти все работает нормально, и основное внимание уделяется тому, что нужно (с несколькими настройками, которые мне пришлось кодировать). В любом случае, моя проблема в том, что возникает странное состояние гонки при прокрутке списка пальцем, а затем внезапном использовании трекбола , когда отображается клавиатура IME . Что-то должно выйти за пределы и быть переработано, после чего метод offsetRectBetweenParentAndChild () должен сработать и вызвать исключение IllegalArgumentException .

Проблема в том, что это исключение выбрасывается вне любого блока, в который я могу вставить try / catch (насколько мне известно). Таким образом, есть два правильных решения этого вопроса:

  1. Кто-то знает , почему возникает это исключение и как его предотвратить
  2. Кто-то знает, как поместить блок try / catch где-нибудь, что по крайней мере, позволит моему приложению выжить. Насколько я знаю, проблема заключается в фокусе, поэтому оно определенно не должно убивать мое приложение (что оно и делает). Я попытался переопределить методы ViewGroup , но эти два метода offset * помечены как окончательные.

Трассировка стека:

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 18:23:09.825: ERROR/AndroidRuntime(1608):     at android.app.ActivityThread.main(ActivityThread.java:3683)
08-17 18:23:09.825: ERROR/AndroidRuntime(1608):     at java.lang.reflect.Method.invokeNative(Native Method)
08-17 18:23:09.825: ERROR/AndroidRuntime(1608):     at java.lang.reflect.Method.invoke(Method.java:507)
08-17 18:23:09.825: ERROR/AndroidRuntime(1608):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
08-17 18:23:09.825: ERROR/AndroidRuntime(1608):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
08-17 18:23:09.825: ERROR/AndroidRuntime(1608):     at dalvik.system.NativeStart.main(Native Method)
54
задан dmon 17 August 2011 в 12:01
поделиться