首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >致命的崩溃:焦点搜索返回了一个无法获得焦点的视图

致命的崩溃:焦点搜索返回了一个无法获得焦点的视图
EN

Stack Overflow用户
提问于 2012-11-29 04:47:52
回答 7查看 19.8K关注 0票数 53

当我在EditText中输入内容时,我的应用程序总是崩溃,但这种情况并不总是发生在某些情况下。我正在三星Galaxy Tab210.1 WiFI & 3G (GT-P5100)上运行我的应用程序,安卓4.0.4 (ICS)。我使用股票键盘。

这是我的logcat:

代码语言:javascript
运行
复制
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)

这是我的一个EditTexts:

代码语言:javascript
运行
复制
    <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" />
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2013-01-07 10:37:57

我遇到了同样的崩溃,虽然听起来不像是确切的情况,但也许这仍然是有帮助的:

我有两个EditText盒子。在某些情况下,我会隐藏底部的框,所以当我从顶部的框中点击下一步时,它会尝试转到底部的框,但由于它是隐藏的,所以会崩溃。我通过将底部框(另一个EditText的Next Down Focus的目标)设置为不可聚焦来修复此问题:

代码语言:javascript
运行
复制
    EditText inputBox = (EditText)findViewById(R.id.Bottom_Box);
    inputBox.setFocusable(false);

我希望这能帮到你。

票数 23
EN

Stack Overflow用户

发布于 2017-12-27 19:44:27

当ImeOptions设置为EditorInfo.IME_ACTION_NEXTEditorInfo.IME_ACTION_PREVIOUS时,会出现此错误。而该视图的父级不可聚焦,或者找到的下一个焦点对象不可聚焦。

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

因此,解决方案相当简单。在本例中,不要将其设置为IME_ACTION作为next。如果你不能快速地从一个文本字段跳到另一个文本字段,那么要么使其可行,要么将该操作切换到正在完成。

代码语言:javascript
运行
复制
edittext.setImeOptions(EditorInfo.IME_ACTION_DONE);

注意代码中令人不快的位之前的注释:

这是对某些默认操作的处理。请注意,为了向后兼容,我们不会在没有显式ime选项的情况下进行这种默认处理,而是将其转换为应用程序可能期望的正常enter键代码。

如果你设置了edittext类型,或者你给出了一个明确的IME,而这个IME在功能上没有错误,它就不会这样做。或者拥有一个可聚焦于下一个或任何其他对象的父对象。它只是一个回退位中的遗留代码,有时可能不具有尽可能给定的操作。

票数 57
EN

Stack Overflow用户

发布于 2018-03-23 00:04:52

之前的答案对我都不起作用。我的editText在回收视图中,而下一个editText在它不在视图中时无法接收焦点。

我检查了问题的原因,在TextView类中是这样的:

代码语言:javascript
运行
复制
    // 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.
        if (actionCode == EditorInfo.IME_ACTION_NEXT) {
            View view = focusSearch(FOCUS_FORWARD);
            if (view != null) {
                if (!view.requestFocus(FOCUS_FORWARD)) {
                    throw new IllegalStateException("focus search returned a view "
                            + "that wasn't able to take focus!");
                }
            }
            return;

        } 

我更新了我的EditText以侦听任何编辑器操作,并执行了以下操作:

代码语言:javascript
运行
复制
 companyNameET.setOnEditorActionListener(new TextView.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView textView, int actionId, KeyEvent event) {
            if (actionId == EditorInfo.IME_ACTION_NEXT) {
                View view = textView.focusSearch(FOCUS_FORWARD);
                if (view != null) {
                    if (!view.requestFocus(FOCUS_FORWARD)) {
                        return true;
                    }
                }
               return false;
            } 
            return false;
        }
    });
票数 23
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13614101

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档