当我在EditText中输入内容时,我的应用程序总是崩溃,但这种情况并不总是发生在某些情况下。我正在三星Galaxy Tab210.1 WiFI & 3G (GT-P5100)上运行我的应用程序,安卓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" />
发布于 2013-01-07 10:37:57
我遇到了同样的崩溃,虽然听起来不像是确切的情况,但也许这仍然是有帮助的:
我有两个EditText盒子。在某些情况下,我会隐藏底部的框,所以当我从顶部的框中点击下一步时,它会尝试转到底部的框,但由于它是隐藏的,所以会崩溃。我通过将底部框(另一个EditText的Next Down Focus的目标)设置为不可聚焦来修复此问题:
EditText inputBox = (EditText)findViewById(R.id.Bottom_Box);
inputBox.setFocusable(false);
我希望这能帮到你。
发布于 2017-12-27 19:44:27
当ImeOptions设置为EditorInfo.IME_ACTION_NEXT
或EditorInfo.IME_ACTION_PREVIOUS
时,会出现此错误。而该视图的父级不可聚焦,或者找到的下一个焦点对象不可聚焦。
它调用查找应该快速跳转到的下一个焦点项,但这不存在或不可聚焦,它抛出此错误。如果next是隐藏的,因此不能聚焦,或者父级无法实际处理findFocus()调用并返回null,就会发生这种情况。
因此,解决方案相当简单。在本例中,不要将其设置为IME_ACTION作为next。如果你不能快速地从一个文本字段跳到另一个文本字段,那么要么使其可行,要么将该操作切换到正在完成。
edittext.setImeOptions(EditorInfo.IME_ACTION_DONE);
注意代码中令人不快的位之前的注释:
这是对某些默认操作的处理。请注意,为了向后兼容,我们不会在没有显式ime选项的情况下进行这种默认处理,而是将其转换为应用程序可能期望的正常enter键代码。
如果你设置了edittext类型,或者你给出了一个明确的IME,而这个IME在功能上没有错误,它就不会这样做。或者拥有一个可聚焦于下一个或任何其他对象的父对象。它只是一个回退位中的遗留代码,有时可能不具有尽可能给定的操作。
发布于 2018-03-23 00:04:52
之前的答案对我都不起作用。我的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;
}
});
https://stackoverflow.com/questions/13614101
复制相似问题