我有以下代码。下面你可以看到我的viewholder,adapter和我的xml。我遇到的问题是有时不执行点击。只有当我在textview和imageview中的viewholder中设置clicklisteners时才会工作。据推测,textview和imageview会让点击被蚕食。任何人都知道为什么会出现这种情况。
class GeneralListItemViewHolder(val view: View) : RecyclerView.ViewHolder(view) {
var item: GeneralItemViewModel? = null
init {
view.setOnClickListener {
item?.method?.invoke()
}
}
fun bind(item: GeneralItemViewModel) {
this.item = item
//Do some nice UI things
}
}
我的xml看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
style="@style/ListItem">
<ImageView
android:id="@+id/general_list_item_icon"
style="@style/ListItem.Icon"
android:layout_alignParentStart="true"
android:layout_centerVertical="true" />
<TextView
android:id="@+id/general_list_item_title"
style="@style/ListItem.Labels.Title"
android:layout_centerVertical="true"
android:layout_marginStart="@dimen/margin"
android:layout_toEndOf="@id/general_list_item_icon" />
此外,我的适配器代码包含以下内容:
class GeneralItemAdapter(val items: List<GeneralItemViewModel>) : RecyclerView.Adapter<GeneralListItemViewHolder>() {
override fun onBindViewHolder(holder: GeneralListItemViewHolder, position: Int) {
return holder.bind(getItem(position))
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): GeneralListItemViewHolder {
val view = parent.inflate(R.layout.general_list_item, false)
return GeneralListItemViewHolder(view)
}
override fun getItemCount(): Int {
return items.size
}
private fun getItem(position: Int): GeneralItemViewModel {
return items[position]
}
}
答案 0 :(得分:0)
您必须在bind方法中设置ClickListener。
答案 1 :(得分:0)
实际上,问题与在视图上使用合成kotlin扩展有关。如果您在变量视图而不是itemView上使用它们,则单击会被textview吃掉。
fun bind(item: AboutGeneralItemViewModel) {
this.item = item
itemView.general_list_item_title.text = item.value
itemView.setOnClickListener {
item?.method?.invoke()
}
}