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

145

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

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

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

Sheetal Shelar
источник

Ответы:

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();
        }
    }
});
Pratik
источник
Во фрагментах внутри слушателя смены фокуса я не могу обновить свой интерфейс, есть идеи?
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();

            }
        }
    });
Dev_Man
источник
Это сработало, но я не понимаю, что вышеупомянутое решение не сработало для меня
shruti iyyer