[英]Android - onClickListener not working for ImageButton in CardView
我已经在 StackOverflow 上搜索了类似的问题,并且按照那里描述的说明进行操作,但我仍然无法让我的 onClickListener 为我的图像按钮触发。 有人能帮我吗?
我详细解释了我的问题。
这是我的 CardView 的 xml:
<?xml version="1.0" encoding="utf-8"?>
<com.google.android.material.card.MaterialCardView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/item_title"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp"
android:textAppearance="?attr/textAppearanceHeadline6" />
<TextView
android:id="@+id/item_description"
android:layout_below="@id/item_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?attr/textAppearanceBody1"
android:paddingLeft="16dp"
android:paddingRight="16dp" />
<com.google.android.material.button.MaterialButton
style="?attr/borderlessButtonStyle"
android:id="@+id/workout_start_action"
android:layout_below="@id/item_description"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/start_workout" />
<ImageButton
android:id="@+id/workout_delete_imgButton"
android:layout_below="@id/item_description"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:background="?attr/selectableItemBackgroundBorderless"
android:src="@drawable/ic_delete"
android:padding="8dp"
android:contentDescription="FavButtonDesc" />
</RelativeLayout>
</com.google.android.material.card.MaterialCardView>
这是我的适配器:
package com.example.workouttimer.adapter
import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import android.widget.Toast
import androidx.recyclerview.widget.RecyclerView
import com.example.workouttimer.R
import com.example.workouttimer.model.Workout
class WorkoutItemAdapter(private val context: Context,
private val dataset: List<Workout>
) : RecyclerView.Adapter<WorkoutItemAdapter.WorkoutItemViewHolder>() {
class WorkoutItemViewHolder(private val view: View) : RecyclerView.ViewHolder(view) {
val textView = view.findViewById<TextView>(R.id.item_title)
val descriptionTextView = view.findViewById<TextView>(R.id.item_description)
val imgDeleteButton = view.findViewById<ImageView>(R.id.workout_delete_imgButton)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): WorkoutItemViewHolder {
// create a new view
val adapterLayout = LayoutInflater.from(parent.context)
.inflate(R.layout.workout_list_item, parent, false)
return WorkoutItemViewHolder(adapterLayout)
}
override fun getItemCount(): Int {
return dataset.size
}
override fun onBindViewHolder(holder: WorkoutItemViewHolder, position: Int) {
val item = dataset[position]
holder.textView.text = item.workoutName
holder.descriptionTextView.text = item.workoutDescription
holder.imgDeleteButton.setOnClickListener(View.OnClickListener {
/*fun onClick(v: View) {
Toast.makeText(v.context, "BORRADO!!!", Toast.LENGTH_LONG)
}*/
fun onClick(position: Int) {
Toast.makeText(this.context, "BORRADO!!!", Toast.LENGTH_LONG)
}
})
}
}
我究竟做错了什么? 提前致谢。
你确定它没有火? 我问是因为您忘记在吐司上调用show()
。 因此,在您单击时尝试记录事件,或在您的 toast 上调用show()
,如下所示:
Toast.makeText(context, "BORRADO!!!", Toast.LENGTH_LONG).show()
所以下面的代码是一个SAM转换的例子
// What you did
View.OnClickListener { // This is where the SAM conversion happens
fun onClick(position: Int) { // This is a local function defined inside your lambda
Toast.makeText(this.context, "BORRADO!!!", Toast.LENGTH_LONG)
}
}
}
// What you should've done
View.OnClickListener { // This is where the SAM conversion happens
Toast.makeText(this.context, "BORRADO!!!", Toast.LENGTH_LONG).show()
}
因为View.OnClickListener
只有一个抽象方法,通过使用 SAM 转换,您不必指定要覆盖的方法
编辑:在 Kotlin 中,如果没有override
关键字,您将无法覆盖方法
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.