java - 致命崩溃 : Focus search returned a view that wasn't able to take focus

标签 java android illegalstateexception

当我在 EditText 中键入内容时,我的应用程序不断崩溃,但这并不总是仅在某些情况下发生。我在装有 Android 4.0.4 (ICS) 的三星 Galaxy Tab 2 10.1 WiFI 和 3G (GT-P5100) 上运行我的应用程序。我使用股票键盘。

这是我的日志:

11-28 21:43:01.007: E/AndroidRuntime(15540): java.lang.IllegalStateException: focus search returned a view that wasn't able to take focus!
11-28 21:43:01.007: E/AndroidRuntime(15540):    at android.widget.TextView.onKeyUp(TextView.java:5833)
11-28 21:43:01.007: E/AndroidRuntime(15540):    at android.view.KeyEvent.dispatch(KeyEvent.java:2659)
11-28 21:43:01.007: E/AndroidRuntime(15540):    at android.view.View.dispatchKeyEvent(View.java:5547)
11-28 21:43:01.007: E/AndroidRuntime(15540):    at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1246)
11-28 21:43:01.007: E/AndroidRuntime(15540):    at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1246)
11-28 21:43:01.007: E/AndroidRuntime(15540):    at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1246)
11-28 21:43:01.007: E/AndroidRuntime(15540):    at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1246)
11-28 21:43:01.007: E/AndroidRuntime(15540):    at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1246)
11-28 21:43:01.007: E/AndroidRuntime(15540):    at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1246)
11-28 21:43:01.007: E/AndroidRuntime(15540):    at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:2027)
11-28 21:43:01.007: E/AndroidRuntime(15540):    at com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1388)
11-28 21:43:01.007: E/AndroidRuntime(15540):    at android.app.Activity.dispatchKeyEvent(Activity.java:2324)
11-28 21:43:01.007: E/AndroidRuntime(15540):    at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1954)
11-28 21:43:01.007: E/AndroidRuntime(15540):    at android.view.ViewRootImpl.deliverKeyEventPostIme(ViewRootImpl.java:3360)
11-28 21:43:01.007: E/AndroidRuntime(15540):    at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2618)
11-28 21:43:01.007: E/AndroidRuntime(15540):    at android.os.Handler.dispatchMessage(Handler.java:99)
11-28 21:43:01.007: E/AndroidRuntime(15540):    at android.os.Looper.loop(Looper.java:137)
11-28 21:43:01.007: E/AndroidRuntime(15540):    at android.app.ActivityThread.main(ActivityThread.java:4514)
11-28 21:43:01.007: E/AndroidRuntime(15540):    at java.lang.reflect.Method.invokeNative(Native Method)
11-28 21:43:01.007: E/AndroidRuntime(15540):    at java.lang.reflect.Method.invoke(Method.java:511)
11-28 21:43:01.007: E/AndroidRuntime(15540):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
11-28 21:43:01.007: E/AndroidRuntime(15540):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
11-28 21:43:01.007: E/AndroidRuntime(15540):    at dalvik.system.NativeStart.main(Native Method)

这是我的一个编辑文本:

    <EditText
    android:id="@+id/input_ftu_position_other"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="64dp"
    android:ems="20"
    android:inputType="text" />

最佳答案

当 ImeOptions 设置为 EditorInfo.IME_ACTION_NEXTEditorInfo.IME_ACTION_PREVIOUS 时会发生此错误。虽然该 View 的父级不可聚焦,或者下一个找到的焦点对象不可聚焦。

它调用查找应该快速跳转到的下一个焦点项目,但它不存在或不可聚焦,它会抛出此错误。如果 next 被隐藏因此无法聚焦,或者父级实际上无法处理 findFocus() 调用并返回 null,则会发生这种情况。

因此,解决方案相当简单。在这种情况下,不要将其设置为 IME_ACTION。如果您不能快速从一个文本字段跳转到另一个文本字段,那么要么将其设为可行,要么将操作切换为 DONE。

edittext.setImeOptions(EditorInfo.IME_ACTION_DONE);

注意代码中违规位之前的注释:

This is the handling for some default action. Note that for backwards compatibility we don't do this default handling if explicit ime options have not been given, instead turning this into the normal enter key codes that an app may be expecting.

如果您设置了 edittext 类型,或者您提供了一个在功能上没有错误的显式 IME,它就不会这样做。或者有一个可以关注下一个或其他任何东西的父对象。它只是回退位中的遗留代码,有时可能没有给定的操作。

关于java - 致命崩溃 : Focus search returned a view that wasn't able to take focus,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13614101/

相关文章:

java - 如何知道我的手指在哪里、在哪个布局上?

java - 内部 AsyncTask 安全地访问外部 Activity 类私有(private)成员字段吗?

java - 谷歌玩游戏

android - android 中的 illegalStateException

java - 编码期间 JAXB null 代替空字符串

java - 一点一点画曲线

android - 在自定义键盘中添加下一个按钮

android - 如何在将图像上传到 firebase 存储之前减小图像的大小?

android - Android 3.x 和 4.x 中的 java.lang.IllegalStateException ;在 2.x 上工作正常

Java DOM setAttribute 不起作用