2012-03-02 4 views
0

Я добавил OnFocusChangeListener к моему EditText так, что я могу сделать некоторые проверки на значение, когда пользователь щелкает на улице, или вкладки из-за, по мнению EditText:onFocusChange() действует как TextChanged()

EditText myEditText = (EditText) itemView.findViewById(R.id.myedittext); 
    myEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
    @Override 
    public void onFocusChange(View view, boolean hasFocus) { 
    EditText editText = (EditText)view; 
    if (!hasFocus) { 
     validate(editText.getText().toString()); 
    } 
    } 
} 

Однако, похоже, метод onFocusChange() вызывается как метод textChanged(). Он вызывается каждый раз, когда я ввожу что-либо в текстовое поле. Я пробовал это как на симуляторе 2.2, так и на своем собственном аппаратном устройстве, и они действуют одинаково.

Я был бы признателен за понимание того, как работает OnFocusChangeListener и почему он работает так, как он для меня.

Заранее спасибо.

ответ

1

Во-первых, вам не нужно обновлять текст EditText editText в методе onFocusChange. myEditText должен быть переменной класса, которая установлена ​​в методе onCreate. Я думаю, что ваш код обрабатывает два отдельных экземпляра.

И попробуйте добавить OnEditorActionListener

myEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() { 
    @Override 
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
     if (actionId == EditorInfo.IME_ACTION_DONE) { 
      validate(myEditText.getText().toString()); 
      return true; 
     } 
     return false; 
    } 
}); 
0

Я также столкнулся с проблемой и не нашли подробную информацию об обработке onFocusChange() вместе с EditText текст изменен.

Я уверен, что onFocusChange() вызывается каждый раз, когда вызывается [editText].setText(). В моем случае я хочу проверить входной текст после ввода, или hasFocus() возвращает false. За этим валидацией следует установить текстовое поле. Таким образом, эти 2 процесса onFocusChange() и [editText].setText() прерывают друг друга.

РешениеKnowing when Edit text is done being edited

Используя что-то вроде этого

meditText.setOnEditorActionListener(new TextView.OnEditorActionListener() { 
     @Override 
     public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
      if (actionId == EditorInfo.IME_ACTION_DONE) { 

       yourcalc(); 

       return true; 
      } 
      return false; 
     } 
    });