OnFocusChange не всегда работает - PullRequest
6 голосов
/ 24 февраля 2012

В одном из моих занятий у меня есть три EditText и кнопка ОК.OnFocusChangeListener установлен на все три EditText с.Слушатель должен срабатывать каждый раз, когда теряется фокус.

Переключение между EditText с работает отлично.Но если пользователь нажимает кнопку «ОК», то нет никакого изменения фокуса (потеря фокуса) для EditText, на который фокусировался пользователь перед нажатием кнопки.

Что не так с моим кодом?

private class MyOnFocusChangeListener implements OnFocusChangeListener {
    private EditText editText;

    public MyOnFocusChangeListener(final EditText editText) {
        super();

        this.editText = editText;
    }

    @Override
    public void onFocusChange(final View view, final boolean isFocused) {
        if (!isFocused) {
            if (editText == editText1) {
                // Do a calculation
            } else if (editText == editText2) {
                // Do another calculation
            } else if (editText == editText3) {
                // Do a different calculation
            }
        }
    }
}

@Override
public void onCreate(final Bundle bundle) {
    // ...
    editText1.setOnFocusChangeListener(new MyOnFocusChangeListener(editText1));
    editText2.setOnFocusChangeListener(new MyOnFocusChangeListener(editText2));
    editText3.setOnFocusChangeListener(new MyOnFocusChangeListener(editText3));
    // ...
}

Ответы [ 4 ]

8 голосов
/ 24 февраля 2012

Вы можете попытаться очистить фокус, когда пользователь нажмет OK или другую кнопку ....

например

 builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() 
 {
     public void onClick(DialogInterface dialog, int whichButton) 
     {
          editText1.clearfocus();
          editText2.clearfocus();
          editText3.clearfocus();
          ....
     }
 }
2 голосов
/ 05 сентября 2012

Возможно, вы захотите попробовать: addTextChangedListener (..) в этом случае.

1 голос
/ 24 февраля 2012

Похоже, у вас могут быть проблемы с сенсорным режимом, из документов для Android :

"Связь между сенсорным режимом, выбором и фокусом означает, что вы не должны полагаться на выбор и/ или сосредоточиться на существовании в вашем приложении. "

0 голосов
/ 09 мая 2019

Это работает, если вы связываете onFocusChangeListener с элементом представления, который хотите наблюдать

editText.onFocusChangeListener = this
editText.setOnClickListener(this)

по ключевому слову this это означает ViewHolder класс

...