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 に答える