3

我正在使用以下代码进行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}"/>
4

2 回答 2

4

如果您像这样编写 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>

不要忘记在 Fragment 或 Activity 中设置处理程序变量:

binding.setHandler(new Handler())
于 2018-12-19T21:38:14.627 回答
0

上面的代码工作正常。我没有在布局的 xml 中添加可点击等于 true。

于 2018-12-28T15:05:32.157 回答