如何在Kotlin中为recyclerView的项目添加onClickListener?

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

我正在使用recyclerView来显示来自firebase数据库的数据,我想处理点击,现在重要的部分是,我想知道被点击的数字,以便在显示下一个活动之前测试google play在应用程序中的计费,我的意思是用户应该点击项目编号1,然后支付看到的信息编号1等任何帮助,请?

//my adapter

class MyAdapter(
    private val arrayList: ArrayList<Long>
) :
    RecyclerView.Adapter<MyAdapter.MyViewHolder>() {

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

    override fun getItemCount() = arrayList.size

    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
        holder.number.text = arrayList[position].toString()
    }

    class MyViewHolder(view: View) :
        RecyclerView.ViewHolder(view) {
        val number = view.findViewById<View>(R.id.singleNumberId) as TextView
    }

}
android firebase kotlin android-recyclerview recycler-adapter
1个回答
2
投票

这是一个小例子,我有一个注册一个RecyclerView适配器项目的点击。

class PatientListAdapter : ListAdapter<Patient, PatientListAdapter.PatientViewHolder>(co.za.abcdefgh.viewmodels.PatientListViewModel.DiffItemCallback) {

    // this property will be used to set the onclick callback for the entire adpater
    var onPatientSelectedCallback: PatientSelectedCallback? = null

    override fun onCreateViewHolder(
        parent: ViewGroup,
        viewType: Int
    ): PatientViewHolder {
        val view = LayoutInflater.from(parent.context)
            .inflate(R.layout.item_patient, parent, false) as View
        return PatientViewHolder(view)
    }

    override fun onBindViewHolder(holder: PatientViewHolder, position: Int) {
        holder.view.item_patient_name.text = getItem(position).toString()
        holder.view.item_patient_folderNumber.text = getItem(position).folderNumber

        // lets set our on click for each viewholder here
        holder.view.item_patient_info_card.setOnClickListener {
            // the secret sauce .... getItem(holder.adapterPosition)
            onPatientSelectedCallback?.onPatientSelected(getItem(holder.adapterPosition))
        }
    }

    class PatientViewHolder(val view: View) : RecyclerView.ViewHolder(view)

    // interface which defines a method signature that will called when a item in the adpater is selected
    interface PatientSelectedCallback {
        fun onPatientSelected(patient: Patient)
    }
}

然后无论你在哪里使用适配器实例化后,简单地做:

val viewAdapter = PatientListAdapter()

viewAdapter.onPatientSelectedCallback =
    object : PatientListAdapter.PatientSelectedCallback {
        override fun onPatientSelected(patient: Patient) {
            // do something with the chosen item
            patientViewModel.setPatient(patient)
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.