致命交通意外:聚焦搜索返回无法采取集中视图(Fatal crash: Focus search re

2019-07-04 06:10发布

我的应用程序保持当我输入一个东西的EditText崩溃,但这并不只在某些情况下总是发生。 我正在我的应用程序是三星的Galaxy Tab 2 10.1 Wifi和3G(GT-P5100)采用Android 4.0.4(ICS)。 我用的是股票的键盘。

这是我的logcat的:

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之一:

    <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" />

Answer 1:

我在此死机一样,虽然它听起来不像的确切情况,或许这也是有帮助的:

我有两个EditText上盒。 底部是一个顶一个的下一步重心下移。 在某些情况下,我会隐藏底盒,所以当我打到旁边的键盘,从机顶盒,它会尝试去下一个,但会崩溃,因为它是隐藏的。 我解决了这个问题通过设置底盒(另外的EditText的下下来聚焦的目标)为不可作为焦点:

    EditText inputBox = (EditText)findViewById(R.id.Bottom_Box);
    inputBox.setFocusable(false);

我希望这有帮助。



Answer 2:

当ImeOptions设置为出现此错误EditorInfo.IME_ACTION_NEXTEditorInfo.IME_ACTION_PREVIOUS 。 虽然这视图的父是不可聚焦,或者下一个发现焦点对象不是可聚焦。

它调用的发现应该是迅速跃升到下一个焦点项目,但这不存在或不可作为焦点,它抛出这个错误。 如果下一个是隐藏的,因此不可作为焦点或家长其实可以处理不与findFocus()调用和返回null这会发生。

该解决方案正是如此是相当容易的。 不要将其设置为IME_ACTION在这种情况下,下一个。 如果不能迅速地从文本字段跳到文本字段,然后要么做出可行或切换的动作正在进行。

edittext.setImeOptions(EditorInfo.IME_ACTION_DONE);

请注意,在违规位之前的代码的注释:

这是一些默认的动作处理。 请注意,为了向下兼容,我们不这样做默认处理,如果明确IME选项没有给出,而不是把这个变成一个应用程序可期待正常的输入键码。

如果你设置的EditText类型,如果你给一个明确的输入法,是不是错功能,不会做这做。 或有一个父对象,它是对别人的未来或任何可获得焦点。 这是在有时可能不具有给定的动作尽可能后备位仅遗留代码。



Answer 3:

以前的答案都不为我工作。 我有EDITTEXT在recyclerview和下EDITTEXT不能接收焦点时,它的观点是没有。

我检查了该问题的原因,它是这的TextView类:

    // 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 v = focusSearch(FOCUS_FORWARD);
            if (v != null) {
                if (!v.requestFocus(FOCUS_FORWARD)) {
                    throw new IllegalStateException("focus search returned a view "
                            + "that wasn't able to take focus!");
                }
            }
            return;

        } 

更新我的EDITTEXT监听任何编辑操作和这样做:

 companyNameET.setOnEditorActionListener(new TextView.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            if (actionId == EditorInfo.IME_ACTION_NEXT) {
                View v1 = v.focusSearch(FOCUS_FORWARD);
                if (v1 != null) {
                    if (!v.requestFocus(FOCUS_FORWARD)) {
                        return true;
                    }
                }
               return false;
            } else return false;
        }
    });


Answer 4:

我有另一种解决方案,以跟踪TextView的源代码,并与您提供的错误日志

TextView.java:

if (!hasOnClickListeners()) {
    View v = focusSearch(FOCUS_DOWN);

    if (v != null) {
        if (!v.requestFocus(FOCUS_DOWN)) {
            throw new IllegalStateException(
                    "focus search returned a view " +
                    "that wasn't able to take focus!");
        }
    }
}

其结果是,我觉得你可以给View.OnClickListener,以避免错误发生。

例如:textView.setOnClickListener(新OnClickListener);



Answer 5:

我有这个问题,并固定它是这样的:

public void setEditable(boolean flag) {
    mEditText.setFocusableInTouchMode(flag);
    mEditText.setFocusable(flag);
    mEditText.setClickable(flag);
}


Answer 6:

用于这种情况发生的原因是,当你的EditText具有指定为禁用的视图nextFocusDown



Answer 7:

我认为这可能是一个错误设备,如:

  • 所有的应用程序调用键盘时崩溃
  • 不幸的是应用程序的名称已停止
  • 谷歌搜索更多...


文章来源: Fatal crash: Focus search returned a view that wasn't able to take focus