我面临一个奇怪的情况。考虑下一段代码:
(XML):
<EditText
android:id="@+vistoria/CNPJTomador"
android:inputType="number"
android:maxLength="18"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
爪哇:
CNPJTomador = (EditText) findViewById(R.vistoria.CNPJTomador);
CNPJTomador.setOnFocusChangeListener(new View.OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus) {
if(!hasFocus && !Validation.isCNPJ(CNPJTomador.getText().toString())) {
Toast.makeText(Checklist.this, "CNPJ inválido!", Toast.LENGTH_SHORT).show();
CNPJTomador.requestFocus();
}
else if (!hasFocus && Validation.isCNPJ(CNPJTomador.getText().toString()))
CNPJTomador.setText(Validation.printCNPJ(CNPJTomador.getText().toString()));
}
});
当用户转到另一个字段时,它应该进行数据验证并在出现任何错误时放回焦点。然而,此时系统变得疯狂。恢复焦点是不可能的。如果我点击另一个EditText,两个都会闪烁光标指示器,如下图所示:
image http://painelflex.com.br/rcfchecklist/screen.png
如果我点击EditText,它会触发其他EditText的事件......它完全是疯了。
以前有人遇到过这种情况吗?
答案 0 :(得分:0)
部分问题在于,您没有停止当前事件将焦点传递给另一个视图,您正在创建另一个事件以再次更改焦点。 ..
无论如何,我建议不要将用户锁定在EditText中。如果数据不正确,只需使用粗体红色字体标记,或在附近添加错误图标。不要试图劫持焦点或光标,它会造成糟糕的用户体验。