首页 > 解决方案 > 如何使用数据绑定从 xml 调用 Edittext onEditorAction

问题描述

像下面的代码

<data>
    <variable
      name="listener"
      type="android.view.View.OnClickListener" />
</data>


<TextView android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android: text="@ {user.firstName}"
     android:onClick="@{listener::onClick}"/>

我想从 XML 调用 editorAction,可以通过 xml 执行它吗?

标签: androiddata-binding

解决方案


1.创建界面

interface CustomOnEditorActionListener {
    fun onEditorAction()
}

2.BindingAdapter

@BindingAdapter("app:customOnEditorActionListener")
fun setCustomOnEditorActionListener(view: TextView, listener: CustomOnEditorActionListener?) {
    if (listener == null) {
        view.setOnEditorActionListener(null)
    } else {
        view.setOnEditorActionListener(object : TextView.OnEditorActionListener {
            override fun onEditorAction(v: TextView?, actionId: Int, event: KeyEvent?): Boolean {
                listener.onEditorAction()
                return false
            }
        })
    }
}

3.在 XML 中。viewModel 实现的接口 CustomOnEditorActionListener

    ...
<variable
name="viewModel"
type="nl.login.LoginViewModel" />

    ...
<EditText
android:id="@+id/password_edit"
app:customOnEditorActionListener="@{viewModel}"
    ...

推荐阅读