У меня есть ListView с некоторыми сосредоточенными компонентами внутри (в основном EditText
s). Да, я знаю, что это не совсем рекомендуется, но в целом почти все работает нормально, и основное внимание уделяется тому, куда он должен идти (с некоторыми настройками, которые мне пришлось кодировать). Во всяком случае, моя проблема в том, что там странное состояние гонки при прокрутке списка пальцем, а затем внезапно использование трекбола при отображении клавиатуры IME. Что-то должно выходить за пределы и перерабатываться, в этот момент метод offsetRectBetweenParentAndChild()
должен пинать и бросать IllegalArgumentException
.
Проблема заключается в том, что это исключение выбрасывается за пределы любого блока, в который я могу вставить try/catch (насколько я знаю). Итак, есть два правильных решения этого вопроса:
- Кто-то знает, почему выбрано это исключение и как его остановить.
- Кто-то знает, как разместить блок 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 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)