2013-09-26 2 views
0

У меня есть текстовое представление редактирования, и я хочу сделать некоторую проверку сразу после того, как пользователь прекратил писать в поле и перешел к следующему, поэтому решил, что использование AfterTextChanged будет логичным делом.TextWatcher AfterTextChanged реагирует на каждую нажатую клавишу?

Проблема заключается в том, что AfterTextChanged запускает код, который я написал в файлах paretheses после каждого нажатия клавиши.

etUserPasswordSignupPage.addTextChangedListener(new TextWatcher() { 

      @Override 
      public void afterTextChanged(Editable s) { 
       //do some validation and then TOAST 
      } 
     }); 

И Toast показывает несколько раз, в то время как Im набрав :( Как я могу сделать это ждать, пока пользователь прекратил печатать и пошел в другое поле, или Готово, а затем запустить код для «afterTextChanged»?

EDIT:

Вот что произошло после реализации setOnEditorActionListener

09-26 17:15:36.275: E/AndroidRuntime(2102): FATAL EXCEPTION: main 
09-26 17:15:36.275: E/AndroidRuntime(2102): java.lang.NullPointerException 
09-26 17:15:36.275: E/AndroidRuntime(2102):  at net.shiftinpower.activities.Signup$4.onEditorAction(Signup.java:154) 
09-26 17:15:36.275: E/AndroidRuntime(2102):  at android.widget.TextView.onEditorAction(TextView.java:3377) 
09-26 17:15:36.275: E/AndroidRuntime(2102):  at com.android.internal.widget.EditableInputConnection.performEditorAction(EditableInputConnection.java:83) 
09-26 17:15:36.275: E/AndroidRuntime(2102):  at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:301) 
09-26 17:15:36.275: E/AndroidRuntime(2102):  at com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:79) 

и вот мой реальный код:

etUserPasswordAgainSignupPage.setOnEditorActionListener(new OnEditorActionListener() { 
    @Override 
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
     if (event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_ENTER) { 
      userPasswordAgain = etUserPasswordAgainSignupPage.getText().toString(); 

      if (userPasswordAgain.equals("")) { 
       Toast.makeText(net.asdqwe.activities.Signup.this, configurationz.ERROR_MESSAGES_SIGNUP_FIELD_NOT_FILLED, Toast.LENGTH_SHORT).show(); 
      } else { 
       passwordAgainIsOk = true; 
       Log.d("kylie", "pass again is ok"); 
      } 

      if (!(userPassword.equals(userPasswordAgain))) { 
       Toast.makeText(net.asdqwe.activities.Signup.this, configurationz.ERROR_MESSAGES_SIGNUP_PASSWORDS_DO_NOT_MATCH, Toast.LENGTH_SHORT).show(); 
       passwordsMatch = false; 
      } else { 
       passwordsMatch = true; 
       Log.d("kylie", "passwords match"); 
      } 
     } 
     return false; 
    } 
}); 
+0

Используйте InputFilter для проверки, а addTextChangedListener() –

+0

, что вы хотите, чтобы проверить точно –

+1

С вы пытаетесь проверить после перехода в следующее поле ввода, пытались ли вы использовать 'OnFocusChangeListener' вместо' TextChangedListener'? – acj

ответ

2

Try ниже код .... этот код вызовет onFocusChangeListener() сразу же, как потери EditText фокус

EditText et = new EditText(this); 
    //or 
    EditText et = (EditText)findViewById(R.id.editText); 
    et.setOnFocusChangeListener(new OnFocusChangeListener() { 
     @Override 
     public void onFocusChange(View v, boolean hasFocus) { 
      // TODO Auto-generated method stub 
      if(!hasFocus){ 
       //Validate the string entered in EditText 
      } 
     } 
    }); 

    OR 

    et.setOnEditorActionListener(new OnEditorActionListener() { 

     @Override 
     public boolean onEditorAction(TextView v, int actionId, 
       KeyEvent event) { 
      // TODO Auto-generated method stub 

      if (actionId == EditorInfo.IME_ACTION_DONE) { 
       //Do your validation thing here 
      } 
      return false; 
     } 
    }); 
+0

спасибо, это намного лучше !!!!!! –

+0

Я не могу снять фокус с последнего поля, прежде чем я отправлю, поэтому код никогда не запускается для него. Как мне это сделать? @Kailash Ahirwar –

+1

для последнего EditText onFocusChangeListener будет работать, когда вы нажмете кнопку «Отправить» .. но проблема в том, что мы не знаем, был ли пользователь заполнен или нет? –

Смежные вопросы