2012-02-24 9 views
5

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

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

Что случилось с моим кодом?

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

ответ

7

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

например

builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() 
{ 
    public void onClick(DialogInterface dialog, int whichButton) 
    { 
      editText1.clearfocus(); 
      editText2.clearfocus(); 
      editText3.clearfocus(); 
      .... 
    } 
} 
+0

Это может вызвать включение OnFocusChange во всех трех EditText, поэтому я не могу его использовать. Но это помогло мне найти лучший способ. Теперь я храню EditText, который получает фокус в члене класса, и в OnClick кнопки я очищаю фокус этого конкретного EditText. Это работает как шарм. Большое спасибо. –

1

Похоже, вы могли бы возникли проблемы с режимом прикосновения, от android docs:

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

+0

Спасибо за ваш ответ. Это действительно плохо, потому что мне нужно выбирать между двумя неудачными сценариями. 1.) Исчисление происходит только в том случае, если пользователь вводит другой EditText перед нажатием кнопки OK (кнопки не настраиваются по умолчанию). 2.) Смените кнопку на фокусируемую так, чтобы пользователь дважды нажал кнопку. Последнее работает лучше, чем первое, потому что пользователь может хранить нерасчетные значения в 1.). –

+0

Возможно, вам нужно немного переосмыслить дизайн своего приложения, что именно он пытается сделать? Вы можете усложнить свой код, когда редизайн может помочь решить вашу проблему. Также у вашего кода есть некоторые проблемы, вам не нужно создавать прослушиватель фокуса и передавать edittext в конструктор. Когда вызывается onFocusChanged, он передаст вам представление, чей фокус изменился, просто введите параметр вида в текст редактирования (сначала проверьте его тип!). – Theblacknight

+1

Ссылка дает: «Ошибка 404 - Файл не найден». – astuter

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