我想点击设备键盘完成按钮验证多个edittexts

时间:2014-06-24 05:41:31

标签: java android validation

我有四个edittext(atm pin类似的东西),我想点击键盘上的完成按钮验证所有这四个edittext(验证如 - 空或错引脚)。到目前为止,我可以得到验证,但只有当我点击完成的buttn两次才会发生。无法弄清楚问题,请帮忙。我是初学者。谢谢!

以下是我的代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);

setContentView(R.layout.pin_new);


setTextFocus(edtpin1, edtpin2);
setTextFocus(edtpin2, edtpin3);
setTextFocus(edtpin3, edtpin4);
setTextFocus(edtpin5, edtpin6);
setTextFocus(edtpin6, edtpin7);
setTextFocus(edtpin7, edtpin8);


edtpin1.setOnEditorActionListener(new OnEditorActionListener(){

@Override
public boolean onEditorAction(TextView v, int arg1, KeyEvent arg2) {

switch (v.getId()) {
case R.id.btnBackPin:
  Intent i = new Intent(getApplicationContext(),RegistrationProfileEmail.class);
  startActivity(i);
  break;

case R.id.btnCancelPin:
  Intent in = new Intent(getApplicationContext(),Exit.class);
  finish();
  startActivity(in);
  break;

case R.id.btnConfirmPin:

  String s = new String();
  s = edtpin1.getText().toString() + edtpin2.getText().toString()
      +edtpin3.getText().toString()    + edtpin4.getText().toString();

if ((edtpin5.getText().toString().trim().isEmpty())
|| (edtpin1.getText().toString().trim().isEmpty())
|| (edtpin2.getText().toString().trim().isEmpty())
|| (edtpin4.getText().toString().trim().isEmpty())
|| (edtpin3.getText().toString().trim().isEmpty())
|| (edtpin6.getText().toString().trim().isEmpty())
|| (edtpin7.getText().toString().trim().isEmpty())
|| (edtpin8.getText().toString().trim().isEmpty())) {
Toast.makeText(getApplicationContext(), "Enter the Pin",
Toast.LENGTH_SHORT).show();

edtpin1.setText(null);
edtpin2.setText(null);
edtpin3.setText(null);
edtpin4.setText(null);
edtpin5.setText(null);
edtpin6.setText(null);
edtpin7.setText(null);
edtpin8.setText(null);
edtpin1.requestFocus();


} 

else if      (edtpin1.getText().toString().trim().equalsIgnoreCase(edtpin5.getText().toString().trim())&&   edtpin2.getText().toString().trim().equalsIgnoreCase(
                                                 edtpin6.getText().toString().trim()) && edtpin3.getText().toString().trim().equalsIgnoreCase(                                                     edtpin7.getText().toString().trim()) && edtpin4.getText().toString().trim().equalsIgnoreCase(                                                       edtpin8.getText().toString().trim())) 
 {
  s = edtpin1.getText().toString() + edtpin2.getText().toString()
      + edtpin3.getText().toString()
      + edtpin4.getText().toString();
      RegistrationPin.this.setPin(s);

  }
            // TODO move to payment option

else {

Toast.makeText(getApplicationContext(), "Pin is not matching",Toast.LENGTH_SHORT).show();
edtpin1.setText(null);
edtpin2.setText(null);
edtpin3.setText(null);
edtpin4.setText(null);
edtpin5.setText(null);
edtpin6.setText(null);
edtpin7.setText(null);
edtpin8.setText(null);
edtpin1.requestFocus();
}
break;
default:
break;
}


return false;



}

});

}

2 个答案:

答案 0 :(得分:0)

创建一个类并实现textwatcher,如下所示:

    private class CheckTextifEmpty implements TextWatcher {
    @Override
    public void afterTextChanged(Editable s) {
    }

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

    @Override
    public void onTextChanged(CharSequence s, int start, int before,
            int count) {
        if (isEmptyCharacters(serverNumber)
                || isEmptyCharacters(textview1)
                || isEmptyCharacters(textview2)
                || isEmptyCharacters(textview3)) {
            //do something here

        } else {
            //do something here
        }
    }
}

并在此处添加此方法:

private boolean isEmptyCharacters(TextView v) {
    return v.getText().toString().trim().isEmpty();
}

并在你的textview中使用它:

textview1.addTextChangedListener(new CheckTextIfEmpty());

您可以在不使用按钮的情况下使用此类验证

重构您的代码:

   private boolean checkifValidate(TextView view1,View TextView2){
      return view1.getText().toString().trim().contentEquals(view2.getText().toString());

}

希望它有所帮助,

答案 1 :(得分:0)

  edtpin1.setOnKeyListener(onSoftKeyboardDonePress);


  private View.OnKeyListener onSoftKeyboardDonePress=new View.OnKeyListener()
        {
            public boolean onKey(View v, int keyCode, KeyEvent event)
            {
                if (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)
                {
                  edtpin1.getText().toString();
                  edtpin2.getText().toString();
                  edtpin3.getText().toString();
                  edtpin4.getText().toString(); 
                }
                return false;
            }
        };