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



我有一个自定义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!")
    }
}

而这个相应的(最小(观点:

<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>

正如我从日志中可以看出的那样,这两个函数似乎都没有被触发。没有引发错误。AndroidStudio正在识别这两个功能的用法。

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

您正在设置变量viewHolder

binding.setVariable(BR.viewHolder, this)

而您只定义了一个holder变量。

因此,holder总是null

最新更新