如何在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请接受答案以帮助其他人找到它