Как создать слушателя смены фокуса с привязкой данных - PullRequest
0 голосов
/ 19 декабря 2018

Я использую следующий код для EditText события изменения фокуса, и он работает, когда я нажимаю на одну EditText на другую EditText, но происходит сбой, когда мы нажимаем за пределами EditText. Я уже добавил focusable="true"and focusableInTouchMode="true", ноэто не работает.

@BindingAdapter("onFocusChange")
public static void onFocusChange(EditText 
text, final View.OnFocusChangeListener 
listener) {
   text.setOnFocusChangeListener(listener);
}

public class Handler {
   public View.OnFocusChangeListener 
      getOnFocusChangeListener() {
           return new 
   View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View 
                  view, boolean isFocussed
          {
            //Hide Keyboard
           }
          };
        }
     }

 <data>
  <variable name="handler" type="Handler"/>
</data>
<EditText app:onFocusChange="@{handler.OnFocusChangeListener}"/>

Ответы [ 2 ]

0 голосов
/ 28 декабря 2018

Вышеупомянутый код работает нормально. Я не добавил кликабельных равных true в xml для макета.

0 голосов
/ 20 декабря 2018

Это должно работать, если вы напишите свой класс Handler следующим образом:

public class Handler {

    public OnFocusChangeListener onFocusChangeListener = new OnFocusChangeListener() {
        @Override
        public void onFocusChange(View view, boolean isFocused) {
            //Hide Keyboard
        }
    };

}

и ваш макет следующим образом:

<layout>

    <data>
        <variable name="handler" type="Handler"/>
    </data>

    <EditText 
        ...
        app:onFocusChangeListener="@{handler.onFocusChangeListener}"
        ... />

</layout>

Не забудьте установить переменную обработчика вФрагмент или действие:

binding.setHandler(new Handler())
...