Recyclerview Card Item Onclick Kotlin

问题描述 投票:0回答:1

我想在用户分别单击卡片视图时创建一种新的意图/活动,而我想知道如何在Kotlin中做到这一点。我注意到大多数教程都是用Java编写的,而且我是一个没有学习Java的学生。

package com.example.ttshfypj.adapters

import androidx.fragment.app.Fragment
import android.view.View
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.example.ttshfypj.data_class.medications
import android.widget.ImageView
import android.widget.TextView
import com.example.ttshfypj.R

import com.squareup.picasso.Picasso
import kotlinx.android.synthetic.main.list_medication.view.*

class medicationAdapter (val medicationlist: ArrayList<medications>) : RecyclerView.Adapter<medicationAdapter.ViewHolder>() {

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        val v = LayoutInflater.from(parent.context).inflate(R.layout.list_medication, parent, false)
        return ViewHolder(v)
    }

    override fun getItemCount(): Int {
        return medicationlist.size
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        val medicationgroup: medications = medicationlist[position]
        holder?.medicationnamevar?.text = medicationgroup.medicineN
        holder?.medicationschedulevar?.text = medicationgroup.MedicineTime
        val imagemedicine = holder?.itemView?.medicationimageview
        Picasso.get().load(medicationgroup.MedicineImage).into(imagemedicine)

    }
    class ViewHolder(itemView: View) :RecyclerView.ViewHolder(itemView) {
        val medicationnamevar = itemView.findViewById(R.id.medicationname) as TextView
        val medicationschedulevar = itemView.findViewById(R.id.medicationschedule) as TextView
    }




}
android-studio kotlin android-recyclerview recycler-adapter android-cardview
1个回答
0
投票

您可以创建interface,例如

interface MyItemClickListener{
    fun itemClick(position: Int)
}

现在您应该将上下文传递到constructoradapter

class medicationAdapter (val medicationlist: ArrayList<medications>, var context: Context) : RecyclerView.Adapter<medicationAdapter.ViewHolder>() {...}

并在适配器内创建MyItemClickListener的实例

// create instance of MyItemClickListener
private val clickListener = context as MyItemClickListener

然后在视图中将click listener设置为onCreateViewHolder

这样修改您的adapter

class medicationAdapter (val medicationlist: ArrayList<medications>, var context: Context) : RecyclerView.Adapter<medicationAdapter.ViewHolder>() {

    // create instance of MyItemClickListener
    private val clickListener = context as MyItemClickListener

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {

        return ViewHolder(v)

        var inflater = LayoutInflater.from(parent.context)
        var v = inflater.inflate(R.layout.list_medication, parent, false)

        var viewHolder = AracModelViewHolder(v)

        // here you set click listener on your item view.
        v.setOnClickListener {
            clickListener.itemClick(viewHolder.adapterPosition)
        }
        return viewHolder
    }

    override fun getItemCount(): Int {
        return medicationlist.size
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        val medicationgroup: medications = medicationlist[position]
        holder?.medicationnamevar?.text = medicationgroup.medicineN
        holder?.medicationschedulevar?.text = medicationgroup.MedicineTime
        val imagemedicine = holder?.itemView?.medicationimageview
        Picasso.get().load(medicationgroup.MedicineImage).into(imagemedicine)

    }
    class ViewHolder(itemView: View) :RecyclerView.ViewHolder(itemView) {
        val medicationnamevar = itemView.findViewById(R.id.medicationname) as TextView
        val medicationschedulevar = itemView.findViewById(R.id.medicationschedule) as TextView
    }
}

最后,在您的活动中,您必须像这样实现MyItemClickListener接口和override itemClick()接口

class YourActivity: AppCompatActivity(), MyItemClickListener {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        // ....
   }

    override fun itemClick(position: Int) {
        Log.d("TAG","Click Item Position: "+position)
        // here you can call your new activity according to your item position.
    }
}

希望它对您有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.