0

フォームを検証する最良の方法は何ですか?

私は次のことを試しました:

EditText fname = (EditText)findViewById(R.id.first_name);
String fname_text = fname.getText().toString; 
if(fname_text.equalsIgnoreCase(""))
        {
            fname.setError("Field is required");
        }

また:

fname.addTextChangedListener(new TextWatcher() 
        {           
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count){

            }           
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,
                    int after){

            }           
            @Override
            public void afterTextChanged(Editable s) 
            {

                Pattern mPattern = Pattern.compile("[A-Za-z]{2,20}$");

                Matcher matcher = mPattern.matcher(s.toString());               
                if(!matcher.matches())       // on Success 
                { 
                    fname.setError("Please make sure you input a valid first name");

                }
              }
        });

私が混乱しているのは...ページが初めて読み込まれるたびにエラーメッセージが表示されるのですが、EditText内に移動してコンテンツを入力すると、コンテンツを消去するとエラーメッセージが表示されます持続しない。では、この検証を永続的に保つにはどうすればよいですか??? プログラムが形作られているため、何もうまく検証できないようです。そして、あなたは完全な例でアンドロイドの正規表現のためのいくつかの良いリンクを知っています, 推薦してください.

また、Pattern メソッドと Matcher メソッドを onTextChanged または beforeTextChanged に配置すると、出力にどのように影響しますか?

4

1 に答える 1

1

直後にチェックを実行する代わりに

EditText fname = (EditText)findViewById(R.id.first_name);
String fname_text = fname.getText().toString; 

OnFocusChangeListenerを使用して、 onFocusChange()メソッドが呼び出されるたびに実行します。理想的には、ビューがフォーカスを失ったときにのみ実行します。何かのようなもの:

EditText fname = (EditText)findViewById(R.id.first_name);
String fname_text = fname.getText().toString; 
fname.setOnFocusChangeListener(new OnFocusChangeListener() {
    @Override
    public void onFocusChange(View arg0, boolean arg1) {
        if(!(v.isFocused())) {
            //Run your validation
        }
    }
});

このようにして、ユーザーが何かを変更するたびにではなく、ユーザーが入力を完了したときにのみ検証を実行します。

于 2013-04-22T14:00:14.623 に答える