Подія для обробки фокусу 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
Це не працює. Якщо клавіатуру приховати за допомогою клавіші "enter" або приховати кнопку клавіатури на деяких пристроях, "втрачений фокус" не запускається. Якщо ви сфокусуєтесь на редагуванні тексту ще раз, файл також не отримав "фокус".
SnowWolf

1
Пам’ятайте, що якщо у вас встановлений макет для зміни розміру, коли відображається м'яка клавіатура, або ви робите щось, що пов’язано з користувачем інтерфейсом, використовуючи TextWatcher, слухачеві можуть зателефонувати багато - навіть двічі для кожного введеного символу! stackoverflow.com/questions/14727248 / ...
M_M

12
  1. Оголосити об’єкт EditText вгорі класу:

     EditText myEditText;
  2. Знайдіть EditText у onCreate Function та setOnFocusChangeListener від 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

коли в kotlin це буде виглядати так:

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.