onFocusChange () действует как textChanged () - PullRequest
0 голосов
/ 02 марта 2012

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

  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 и почему он работает так, как он для меня.

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

Ответы [ 2 ]

1 голос
/ 02 марта 2012

Во-первых, вам не нужно повторно объявлять 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 голосов
/ 20 июня 2014

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

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

Решение Знание, когда редактирование текста завершено, редактируется

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

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