我在回收器视图项中放置了一个按钮,但我无法在单击该按钮时执行任何操作,我知道如何单击回收器视图项,但我不知道如何单击回收器视图中项的特定元素
lateinit var front_anim: AnimatorSet
lateinit var back_anim: AnimatorSet
val scale = this.resources.displayMetrics.density
packetRecView.cameraDistance = 8000 * scale
packetRecView.cameraDistance = 8000 * scale
front_anim =
AnimatorInflater.loadAnimator(context, R.animator.front_animator) as AnimatorSet
back_anim = AnimatorInflater.loadAnimator(context, R.animator.back_animator) as AnimatorSet
if (isFront) {
front_anim.setTarget(flip.cardOnFront)
back_anim.setTarget(flip.backCard)
front_anim.start()
back_anim.start()
isFront = false
} else {
front_anim.setTarget(flip.backCard)
back_anim.setTarget(flip.cardOnFront)
back_anim.start()
front_anim.start()
isFront = true
}
Toast.makeText(context, item.drugs, Toast.LENGTH_SHORT).show()
}
这是我的适配器
class PacketAdapter (val packetList: ArrayList<PacketModel> , var clickListener2: onPacketItemClickListener): RecyclerView.Adapter<PacketAdapter.ViewHolder>(){
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val a = LayoutInflater.from(parent?.context).inflate(R.layout.packet, parent, false)
return ViewHolder(a)
}
override fun getItemCount(): Int {
return packetList.size
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val packet : PacketModel = packetList[position]
holder.intialize(packet, clickListener2)
}
class ViewHolder(itemView : View) : RecyclerView.ViewHolder(itemView)
{
// val takenButton = itemView.findViewById<Button>(R.id.taken)
val fCard = itemView.findViewById<CardView>(R.id.cardOnFront)
val packetTime = itemView.findViewById<TextView>(R.id.timeofPacket)
val timeMessage = itemView.findViewById<TextView>(R.id.messageofTime)
val bCars = itemView.findViewById<CardView>(R.id.backCard)
val drugs = itemView.findViewById<TextView>(R.id.drugs)
val note = itemView.findViewById<TextView>(R.id.note)
val dosage = itemView.findViewById<TextView>(R.id.dosage)
fun intialize(item: PacketModel, action: onPacketItemClickListener){
// val formatter = SimpleDateFormat("yyyy-MM-dd HH:mm:ssZ", Locale.getDefault())
// formatter.timeZone = TimeZone.getTimeZone("UTC")
// val result = formatter.parse(dateAsString)
//
//
//
// takenButton.setOnClickListener(this)
var date = (((item.date) as Timestamp).seconds) * 1000L
fun convertLongToTime(time: Long): String {
val date = Date(time)
val format = SimpleDateFormat("yyyy.MM.dd HH:mm")
format.timeZone = TimeZone.getTimeZone("GMT+5")
return format.format(date)
}
var convertedDate = convertLongToTime(date)
packetTime.text = convertedDate
timeMessage.text = ""
drugs.text = item.drugs
note.text = item.notes
dosage.text = item.dosage
itemView.setOnClickListener {
action.onCardClick(item, adapterPosition)
}
}
}
interface onPacketItemClickListener{
fun onCardClick (item: PacketModel, position: Int)
}
}
现在我想在RecycerView项内执行单击操作。请帮忙
在您的代码中,假设您所需的按钮是mybutton
,并将其定义为适配器,如下所示:
val myButton = itemView.findViewById<Button>(R.id.myButton) // This is your Button, you declared in your xml file.
val fCard = itemView.findViewById<CardView>(R.id.cardOnFront)
val packetTime = itemView.findViewById<TextView>(R.id.timeofPacket)
val timeMessage = itemView.findViewById<TextView>(R.id.messageofTime)
val bCars = itemView.findViewById<CardView>(R.id.backCard)
val drugs = itemView.findViewById<TextView>(R.id.drugs)
val note = itemView.findViewById<TextView>(R.id.note)
val dosage = itemView.findViewById<TextView>(R.id.dosage)
然后只需在适配器的initialize
函数中调用MyButton.setonClickListener
,如下所示:
fun intialize(item: PacketModel, action: onPacketItemClickListener) {
var date = (((item.date) as Timestamp).seconds) * 1000L
fun convertLongToTime(time: Long): String {
val date = Date(time)
val format = SimpleDateFormat("yyyy.MM.dd HH:mm")
format.timeZone = TimeZone.getTimeZone("GMT+5")
return format.format(date)
}
var convertedDate = convertLongToTime(date)
packetTime.text = convertedDate
timeMessage.text = ""
drugs.text = item.drugs
note.text = item.notes
dosage.text = item.dosage
itemView.setOnClickListener {
action.onCardClick(item, adapterPosition)
}
myButton.setOnClickListener {
// Do whatever you want on your button click as like you did to your recycler-view item click
//action.onCardClick(item, adapterPosition)
}
}
正如标题所说,当我单击按钮或RecycerView项目时,我想改变RecycerView项目的样式(不是在所有项目上,只是在单击的项目上)。应该看起来像 单击任一按钮后,隐藏透明覆盖并对该项目执行操作
我试图在单击某个按钮时显示该按钮的值。如果我在eventListener中为此编写代码,则会弹出警报,但不会显示文本。 我已尝试将警报移动到eventListener上方和for循环内部,这将在页面加载时显示正确的值。 按钮的HTML格式: Javascript:
编辑:底部的解决方案 这是一个跳棋游戏。单击一个按钮后,它等待单击第二个按钮与之交换。然而,有时你可能不想移动那个按钮,但一旦你点击了它,就没有回头路了,因为我无法禁用它。 在这里的其他帖子中,我看到人们使用 这只是使它在第一次单击后不可见。 这什么都干不了。 这也没什么用。编辑:所有这些方法都用true和false进行了尝试。 私有无效交换(){ 但你也需要 这样它就重新启用了它,或者其他什么,
在我的应用程序中,我有一个活动,其中包含一个FrameLayout。在这个FrameLayout中,有一个片段,包含一个ToolBar和一个RecyclView。 在这个工具栏中,我有一个搜索按钮,它应该在项目单击时启动活动。但是,当我尝试使用onOptionsItemSelected时,应用程序会成功构建和安装,但当我尝试点击该按钮时,什么也没发生。Logcat也没有说什么。 能告诉我我做错了什
我还看到了如下代码块: 但我不确定如何操纵来获得计数