55

EditText に何かを入力すると、アプリケーションがクラッシュし続けますが、これは常に発生するとは限りません。Android 4.0.4 (ICS) を搭載した Samsung Galaxy Tab 2 10.1 WiFI & 3G (GT-P5100) でアプリを実行しています。純正キーボードを使用しています。

これは私の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 の 1 つです。

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

7 に答える 7

24

以前の回答はどれもうまくいきませんでした。recyclerview で 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;
        }
    });
于 2018-03-22T16:04:51.713 に答える
23

私はこれと同じクラッシュを経験していました。正確な状況のようには聞こえませんが、おそらくこれはまだ役立つでしょう:

2 つの EditText ボックスがありました。下は上のネクストフォーカスダウン。場合によっては、一番下のボックスを非表示にして、一番上のボックスからキーボードの次のキーを押すと、一番下のボックスに移動しようとしましたが、非表示になっているためにクラッシュしました。下のボックス (別の EditText の Next Down Focus のターゲット) をフォーカス不可に設定することで、これを修正しました。

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

これが役立つことを願っています。

于 2013-01-07T02:37:56.917 に答える
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);

于 2015-08-03T10:12:45.547 に答える