1

我面临着一个奇怪的情况。考虑下一段代码:
(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,两者都会闪烁光标指示器,如下图所示:

图片
(来源:painelflex.com.br

如果我单击 EditText,它会触发其他 EditText 的事件......这完全是疯了。

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

4

1 回答 1

0

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

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

于 2012-11-13T22:53:56.403 回答