Событие для обработки фокуса EditText


145

Может ли кто-нибудь предложить мне какое-либо событие, связанное с фокусом EditText? Мое приложение содержитEditText , который принимает URL-адрес в нем.

Теперь моя проблема заключается в том, что после того, как пользователь введет URL-адрес в поле и перейдет дальше, без какого-либо события щелчка, то есть когда фокус будет перемещаться из EditText , он должен обнаружить введенный URL-адрес и перейти на сервер.

Если я получу ответ с помощью Json Parsing, то это будет более удобно.

Ответы:


519

Вот пример фокуса слушателя.

editText.setOnFocusChangeListener(new OnFocusChangeListener() {
    @Override
    public void onFocusChange(View view, boolean hasFocus) {
        if (hasFocus) {
            Toast.makeText(getApplicationContext(), "Got the focus", Toast.LENGTH_LONG).show();
        } else {
            Toast.makeText(getApplicationContext(), "Lost the focus", Toast.LENGTH_LONG).show();
        }
    }
});

Во фрагментах внутри слушателя смены фокуса я не могу обновить свой интерфейс, есть идеи?
moDev

2
Это не работает. Если на некоторых устройствах клавиатура была скрыта «вводом» или скрытием кнопки клавиатуры, «потерянный фокус» не сработает. Если вы снова сконцентрируетесь на редактировании текста, он также не получит файл «получил фокус».
SnowWolf

1
Имейте в виду, что если у вас настроено изменение размера макета при отображении программной клавиатуры или что-то связанное с пользовательским интерфейсом с помощью TextWatcher, слушатель может вызываться много - даже дважды для каждого набранного символа! stackoverflow.com/questions/14727248/…
M_M

12
  1. Объявите объект EditText поверх класса:

     EditText myEditText;
  2. Найдите EditText в функции onCreate и установитеOnFocusChangeListener для EditText:

    myEditText = findViewById(R.id.yourEditTextNameInxml); 
    
    myEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
                @Override
                public void onFocusChange(View view, boolean hasFocus) {
                    if (!hasFocus) {
                         Toast.makeText(this, "Focus Lose", Toast.LENGTH_SHORT).show();
                    }else{
                        Toast.makeText(this, "Get Focus", Toast.LENGTH_SHORT).show();
                    }
    
                }
            });

Работает нормально.


11

когда в котлине это будет выглядеть так:

editText.setOnFocusChangeListener { view, hasFocus ->
        if (hasFocus) toast("focused") else toast("focuse lose")
    }

4

Для тех из нас, кто не справился с вышеуказанным верным решением, здесь есть еще один обходной путь

 searchView.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View view, boolean isFocused) {
            if(!isFocused)
            {
                Toast.makeText(MainActivity.this,"not focused",Toast.LENGTH_SHORT).show();

            }
        }
    });

Это сработало, но я не понимаю, что вышеупомянутое решение не сработало для меня
shruti iyyer
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.