如何在android Studio中的数据绑定中将值传递给android.view.view.OnClickListener变量?

如何在android Studio中的数据绑定中将值传递给android.view.view.OnClickListener变量?,android,data-binding,Android,Data Binding,以下代码来自该项目 有一个变量名为clickListener,它是一个android.view.view.OnClickListener的变量 我不知道如何将值传递给android Studio数据绑定中android.view.view.OnClickListener的变量clickListener,您能告诉我吗 还有,我不能理解PlantAdapter.kt中的代码binding.setClickListener{…},你能告诉我吗 list\u item\u plant.xml <l

以下代码来自该项目

有一个变量名为
clickListener
,它是一个
android.view.view.OnClickListener
的变量

我不知道如何将值传递给android Studio数据绑定中
android.view.view.OnClickListener
的变量
clickListener
,您能告诉我吗

还有,我不能理解PlantAdapter.kt中的代码
binding.setClickListener{…}
,你能告诉我吗

list\u item\u plant.xml

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

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

    <com.google.samples.apps.sunflower.views.MaskedCardView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"      
        android:onClick="@{clickListener}"
       
    ...
}
<layout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools">

    <data>    
        <variable
            name="name"
            type="String"/>    
    </data>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TextView
            android:id="@+id/plain_name"
            android:layout_width="0dp"
            android:layout_height="wrap_content"                
            android:text="@{name}"
     ...
}
PlainOldActivitySolution2.kt

class PlantAdapter : ListAdapter<Plant, RecyclerView.ViewHolder>(PlantDiffCallback()) {    
    ...
    class PlantViewHolder(
        private val binding: ListItemPlantBinding
    ) : RecyclerView.ViewHolder(binding.root) {
        init {
            binding.setClickListener {
                binding.plant?.let { plant ->
                    navigateToPlant(plant, it)
                }
            }
        }

     ...
}
class PlainOldActivitySolution2 : AppCompatActivity() {

    // Obtain ViewModel from ViewModelProviders
    private val viewModel by lazy { ViewModelProviders.of(this).get(SimpleViewModel::class.java) }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        val binding: PlainActivitySolution2Binding =
            DataBindingUtil.setContentView(this, R.layout.plain_activity_solution_2)

        binding.name = "Ada"
        binding.lastName = "Lovelace"
       
    }

    ...
}

我不明白你想传递什么变量,为什么

但要传递任何变量,可以使用如下lambda表达式:

 android:onClick="@{() -> clickListener(someVariable, someOtherVariable)}"
如果需要视图,可以按如下方式传递:

 android:onClick="@{(view) -> clickListener(view)}"

绑定
有自己的类,通常是android
视图。一旦单击Listener
将按钮转换为casted
视图
,您就不能再添加了,但是您可以使用查看。OnClickListener进行侦听,然后找到真实对象并传递给您自己的侦听器。

您希望传递给OnClickListener的变量是什么?谢谢!我不知道如何将变量传递给clickListener,这是我要问的问题。是的,但将值传递给onClickListener的目的是什么?它是xml文件中的变量吗?它是您希望在ViewModel中访问的变量吗?谢谢!请您查看我在问题中添加的内容好吗?您应该始终使用您的变量()方法的set~name\u。因此,不要使用binding.name,使用binding.setName()。@HelloCW这当然意味着setClickListener是传递该变量的正确方法。但我建议您将变量重命名为更明显的名称(如plantClickListener),因为setClickListener()可能与布局本身上的clickListener混淆。@HelloCW请接受答案以帮助其他人找到它