я хочу проверить несколько редактируемых текстов при нажатии кнопки «Готово» на клавиатурах устройств

#java #android #validation

#java #Android #проверка

Вопрос:

У меня есть четыре edittext (типа pin-кода atm), и я хочу проверить все эти четыре edittext при нажатии кнопки keypad done (проверки типа — пустой или неправильный pin-код). до сих пор я мог получить проверки, но это произойдет, только если я дважды нажму кнопку «Готово». не удалось выяснить проблему, пожалуйста, помогите. Я новичок. Спасибо!

Ниже приведен мой код :

 @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())amp;amp;   edtpin2.getText().toString().trim().equalsIgnoreCase(
                                                 edtpin6.getText().toString().trim()) amp;amp; edtpin3.getText().toString().trim().equalsIgnoreCase(                                                     edtpin7.getText().toString().trim()) amp;amp; 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;



}

});

}
  

Ответ №1:

Создайте класс и реализуйте 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();
}
  

и используйте его в своем текстовом представлении следующим образом:

 textview1.addTextChangedListener(new CheckTextIfEmpty());
  

Вы можете использовать свою проверку таким образом, не используя кнопку

Реорганизуйте свой код следующим образом:

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

}

Надеюсь, это поможет,

Комментарии:

1. я хочу это с помощью кнопки «Готово» на клавиатуре устройства!! будет ли этот код вызывать его?

Ответ №2:

   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;
            }
        };