Android - requestFocus无法在EditText中运行

时间:2012-11-13 22:46:13

标签: android

我面临一个奇怪的情况。考虑下一段代码:
(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的事件......它完全是疯了。

以前有人遇到过这种情况吗?

1 个答案:

答案 0 :(得分:0)

部分问题在于,您没有停止当前事件将焦点传递给另一个视图,您正在创建另一个事件以再次更改焦点。 ..

无论如何,我建议不要将用户锁定在EditText中。如果数据不正确,只需使用粗体红色字体标记,或在附近添加错误图标。不要试图劫持焦点或光标,它会造成糟糕的用户体验。