4

現在、2つの編集テキストがあります。空の編集テキストチェックの検証を行いたいとします。実行時検証のより良い方法は何ですか。

私のコードは;

    final EditText ev1 = (EditText) findViewById(R.id.editText1);
    final EditText ev2 = (EditText) findViewById(R.id.editText2);


    ev1.setOnFocusChangeListener(new OnFocusChangeListener() {

    @Override
    public void onFocusChange(View rv, boolean hasFocus) {
    if(!hasFocus && ev1.getText().length()==0)
    {    
        ev1.requestFocus();
        ev2.clearFocus();
    }
    }
});

この2番目のeditTextのクリックでは、First Edittextが空の場合、2番目のEditTextのフォーカスがクリアされますが、キーボード入力は常にSecond Textで行われ、FirstTextでフォーカスを取得することはできません。

このeditTextも動的に追加される可能性があるため、EditTextごとに異なるフォーカスリスナーを提案しないでください。

両方のテキストに焦点を当てる!!!!

より明確に:フォーカスを失う前にev1を検証するだけで、文字が入力されるまで他のビューがフォーカスを取得できないようにします。

4

4 に答える 4

10
    final EditText ev1 = (EditText) findViewById(R.id.editText1);
    final EditText ev2 = (EditText) findViewById(R.id.editText2);

    ev1.setOnFocusChangeListener(new OnFocusChangeListener() {      
        @Override
        public void onFocusChange(View rv, boolean hasFocus) {
            if(!hasFocus && ev1.getText().length()==0)
            {    
                  new Handler().postDelayed(new Runnable() {

                  @Override
                  public void run() {
                       ev2.clearFocus();
                   ev1.requestFocus();

                  }
            }, 100);

         }
      }
    });
于 2013-01-11T07:16:24.017 に答える
0

これを試して :

編集 :

        final EditText ev1,ev2,ev3,ev4,ev5,ev6;

        ev1 = (EditText) findViewById(R.id.editText1);
        ev2 = (EditText) findViewById(R.id.editText2);
        ev3 = (EditText) findViewById(R.id.editText3);
        ev4 = (EditText) findViewById(R.id.editText4);
        ev5 = (EditText) findViewById(R.id.editText5);
        ev6 = (EditText) findViewById(R.id.editText6);

        setValidateAction(ev2);
        setValidateAction(ev3);
        setValidateAction(ev4);
        setValidateAction(ev5);
        setValidateAction(ev6);

このメソッドを宣言します:

public void setValidateAction(final EditText edit_action) {
        edit_action.setOnFocusChangeListener(new OnFocusChangeListener() {
            public void onFocusChange(View v, boolean hasFocus) {
                if(hasFocus && ev1.getText().length()==0){    
                    ev1.requestFocus();               
                }
            }
        });
}            

ありがとう。

于 2013-01-11T07:11:54.593 に答える
0

私は2つのテキストボックスを持つxmlを採用し、この方法で問題を解決しようとしました.

以下のコードを確認して、問題ないか教えてください。

    setContentView(R.layout.activity_main);
    final EditText password = (EditText)findViewById(R.id.editText1);
    final EditText confirmpassword = (EditText)findViewById(R.id.editText2);

    password.addTextChangedListener(new TextWatcher() {

        public void onTextChanged(CharSequence s, int start, int before, int count) {
            if(password.getText().toString().trim().length()==0)
            {
                confirmpassword.setText("");
            }
        }

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

        public void afterTextChanged(Editable s) {
        }
    });
    confirmpassword.setOnFocusChangeListener(new OnFocusChangeListener() {

        public void onFocusChange(View v, boolean hasFocus) {
            if(hasFocus && password.getText().toString().trim().length()==0)
            {
                // First fill password
                password.requestFocus();
            }
        }
    });
于 2013-01-11T07:12:44.537 に答える