不执行Android侦听器绑定(XML)

时间:2018-03-23 13:32:16

标签: android data-binding android-edittext kotlin android-databinding

我有一个自定义RecyclerAdapter,其中包含以下ViewHolder类,它将两个变量绑定到视图中:

inner class ViewHolder(private val binding: ViewDataBinding) :
    RecyclerView.ViewHolder(binding.root) {
    fun bind(obj: Any) {
        binding.setVariable(BR.viewHolder, this)
        binding.setVariable(BR.obj, obj)
        binding.executePendingBindings()
    }

    fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {
        Log.i("test", "Change is here!")
    }

    fun onTextClicked() {
        Log.i("test", "Click is here!")
    }
}

这个相应的(minnimal)视图:

<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">

<data>

    <variable
        name="holder"
        type="(...).adapters.ContactPropertyRecyclerAdapter.ViewHolder" />

    <variable
        name="obj"
        type="(...).models.Address" />
</data>

<android.support.constraint.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <EditText
        android:id="@+id/streetEditText"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginEnd="16dp"
        android:layout_marginTop="16dp"
        android:ems="10"
        android:inputType="textPersonName"
        android:text="@{obj.street}"
        android:onTextChanged="@{(s, start, before, count) -> holder.onTextChanged(s, start, before, count)}"
        android:onClick="@{() -> holder.onTextClicked()}"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
</layout>

这两个函数似乎都没有被触发,因为我可以从Log中看到。没有抛出错误。 AndroidStudio正在认识到这两种功能的用法。

obj变量似乎工作正常,我已经尝试使用额外的类,结果相同。

1 个答案:

答案 0 :(得分:1)

您正在设置变量viewHolder

binding.setVariable(BR.viewHolder, this)

虽然您只定义了holder变量。

因此holder总是null