Фатальный сбой: поиск по фокусу возвратил представление, которое не могло сфокусироваться - программирование
Подтвердить что ты не робот

Фатальный сбой: поиск по фокусу возвратил представление, которое не могло сфокусироваться

Мое приложение продолжает сбой при вводе чего-то в EditText, но это случается не всегда только в некоторых случаях. Я запускаю свое приложение на Samsung Galaxy Tab 2 10.1 WiFI и 3G (GT-P5100) с Android 4.0.4 (ICS). Я использую запасную клавиатуру.

Это мой логарифм:

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

Ответ 1

У меня был такой же крах, и хотя это не похоже на точную ситуацию, возможно, это все равно будет полезно:

У меня было два блока EditText. Нижним был следующий фокус вниз верхней. В некоторых ситуациях я бы спрятал нижний ящик, поэтому, когда я нажимаю следующий на клавиатуре из верхней коробки, он попытается перейти на нижний, но сработает, так как он был скрыт. Я исправил это, установив нижний ящик (цель другого EditText Next Down Focus) как не настраиваемый:

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

Надеюсь, это поможет.

Ответ 2

Эта ошибка возникает, если для параметра ImeOptions установлено значение EditorInfo.IME_ACTION_NEXT или EditorInfo.IME_ACTION_PREVIOUS. Хотя родительский элемент этого представления не является настраиваемым, или следующий найденный объект фокусировки не настраивается.

Он вызывает поиск следующего элемента фокусировки, который следует быстро подпрыгнуть, но это не существует или не фокусируется, он выдает эту ошибку. Это произойдет, если следующий будет скрыт и, следовательно, не будет сфокусирован или родитель не сможет фактически обратиться к вызову findFocus() и возвращает null.

Решение таким образом довольно просто. Не устанавливайте его в IME_ACTION, как в следующем случае. Если вы не можете быстро перейти из текстового поля в текстовое поле, либо сделать это выполнимым, либо переключить действие на DONE.

edittext.setImeOptions(EditorInfo.IME_ACTION_DONE);

Обратите внимание на комментарий в коде перед битком-нарушителем:

Это обработка некоторых действий по умолчанию. Обратите внимание, что для назад мы не выполняем эту обработку по умолчанию, если явно варианты не были приведены, вместо этого превратив это в нормальное введите коды клавиш, которые может ожидать приложение.

Это не будет сделано, если вы установите тип edittext или если вы дадите явный IME, который не является функционально неправильным. Или иметь родительский объект, который можно сфокусировать на следующем или что-нибудь еще. Это только унаследованный код в резервном бите, который может иногда не иметь заданного действия.

Ответ 3

Ни один из предыдущих ответов не сработал для меня. У меня был editText в обзоре переработчика, и следующий 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 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 для прослушивания любых действий редактора и сделал это:

 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;
        }
    });

Ответ 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, чтобы избежать ошибки.

ex: textView.setOnClickListener(новый OnClickListener);

Ответ 5

У меня была эта проблема и она была исправлена ​​следующим образом:

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

Ответ 6

Причина этого заключается в том, что ваш EditText имеет отключенное представление, указанное как nextFocusDown.