我的问题是当我按Backspace(删除错误条目)时,EditText不清除错误的原因。
在回顾了有关此主题的答案之后:有人建议使用TextWatcher,这显然是解决方法https://stackoverflow.com/a/24828706/1306324。有人说这是一个Android bug。
我决定编写以下简单的测试用例:
import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.TextView.OnEditorActionListener;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final EditText text1 = (EditText) findViewById(R.id.text1);
text1.setOnEditorActionListener(new OnEditorActionListener() {
public boolean onEditorAction(TextView editText, int actionId, KeyEvent keyEvent) {
if (Integer.valueOf(text1.getText().toString())>=50) {
text1.setError("Must be less than 50");
return true; //keeps this field in focus in case I had >1 entry fields
}
return false;
}
});
}
}
使用布局activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<EditText
android:id="@+id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="number"/>
</LinearLayout>
确实我键入“123”并按完成我收到错误消息。然后我退格删除3然后2.我仍然收到错误消息。我键入2.错误消息清除。这是不正确的。我想,一旦退格,错误就应该清除。如果这确实是一个错误,那么应该修复它。我用4.1和4.3进行了测试。奇怪的是,它似乎在我的2.3.3上工作正常。
答案 0 :(得分:0)
触发bachspace时,只需设置
即可text1.setError(null);
,这将清除错误
如果错误为空,则将清除错误消息(和您一样) 应该提供一个空图标)。
在您检测退格事件的情况下,请使用
keyEvent.getAction==KeyEvent.KEYCODE_DEL
检测退格。