以下代码来自向日葵项目。
有clickListener
一个名为的变量,它是的变量android.view.View.OnClickListener
。
我不知道如何将一个值传递给变量clickListener
的android.view.View.OnClickListener
数据在Android Studio中结合,你能告诉我吗?
还有,我无法理解binding.setClickListener{...}
PlantAdapter.kt中的代码,您能告诉我吗?
list_item_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}"
...
}
PlantAdapter.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)
}
}
}
...
}
新增内容
通常情况下,我定义数据结合可变name
在plain_activity_solution_2.xml,我应该为它分配一个值,如binding.name = "Ada"
在PlainOldActivitySolution2.kt。
所以,当我定义一个数据绑定变量clickListener
在list_item_plant.xml,我应该指定它的值,如binding.clickListener=...
在PlantAdapter.kt,但我找不到binding.clickListener=...
在PlantAdapter.kt,而不是我只是觉得binding.setClickListener {...}
,为什么呢?
plain_activity_solution_2.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="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 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)}"
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句