Android 在kotlin中,如何设置recyclerview适配器的单击事件

Android 在kotlin中,如何设置recyclerview适配器的单击事件,android,mvvm,android-recyclerview,kotlin,Android,Mvvm,Android Recyclerview,Kotlin,我是kotlin android的新手。我已经为recyclerview创建了适配器。但我无法为每个recyclerview项目执行单击事件。我需要有参考代码的解释。 请帮我做这件事。 提前谢谢。 这是我的代码供你参考 class CustomAdapter(val readerList: ReaderResponse, mainActivity: MainActivity,val btnlistener: BtnClickListener) : RecyclerView

我是kotlin android的新手。我已经为recyclerview创建了适配器。但我无法为每个recyclerview项目执行单击事件。我需要有参考代码的解释。 请帮我做这件事。 提前谢谢。 这是我的代码供你参考

  class CustomAdapter(val readerList: ReaderResponse, mainActivity: 
    MainActivity,val btnlistener: BtnClickListener) : 
    RecyclerView.Adapter<CustomAdapter.ViewHolder>() {


    companion object {
        var mClickListener: BtnClickListener? = null
    }

    override fun onCreateViewHolder(viewgroup: ViewGroup, index: Int): ViewHolder 
    {

        val view=LayoutInflater.from(viewgroup?.context).inflate(R.layout.reader_list,viewgroup,false)
        return ViewHolder(view)
    }

    override fun getItemCount(): Int {
        return readerList.results.size

    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {

        mClickListener = btnlistener
        val item = readerList

        val reader:ReaderData = readerList.results[position]
        /*p0?.imageview?.text=reader.readerIcon*/
        holder?.reader_status?.text=reader.readerStatus
        holder?.ward_name?.text=reader.wardName
        holder?.reader_id?.text=reader.readerID
        holder?.reader_name?.text=reader.readerName
        holder?.reader_location?.text=reader.readerLocation


        if (reader.readerStatus.toLowerCase().equals("yes")){
            holder.reader_name.setTextColor(Color.parseColor("#24a314"))
        }else if (reader.readerStatus.toLowerCase().equals("no")){

            holder.reader_name.setTextColor(Color.parseColor("#f4312d"))
            holder.warning.setVisibility(View.VISIBLE)
        }
    }



    class ViewHolder(itemView: View) :RecyclerView.ViewHolder(itemView) {

        val imageview = itemView.findViewById(R.id.imageview) as Button
        val reader_name = itemView.findViewById(R.id.reader_name) as TextView
        val reader_location = itemView.findViewById(R.id.floor_no) as TextView
        val ward_name = itemView.findViewById(R.id.ward_name) as TextView
        val reader_id = itemView.findViewById(R.id.reader_id) as TextView
        val reader_status = itemView.findViewById(R.id.reader_status) as TextView
        val warning=itemView.findViewById(R.id.warning) as Button




      }
      open interface BtnClickListener {
        fun onBtnClick(position: Int)
     }

     }
class CustomAdapter(val readerList:ReaderResponse,mainActivity:
主活动,val btnlistener:BtnClickListener):
RecyclerView.Adapter(){
伴星{
var mClickListener:BtnClickListener?=null
}
覆盖创建ViewHolder(视图组:viewgroup,索引:Int):ViewHolder
{
val view=LAYOUTINGFLATER.from(viewgroup?.context)。充气(R.layout.reader\U列表,viewgroup,false)
返回视图保持器(视图)
}
重写getItemCount():Int{
返回readerList.results.size
}
覆盖BindViewHolder(holder:ViewHolder,位置:Int){
mClickListener=btnlistener
val item=readerList
val reader:ReaderData=readerList.results[位置]
/*p0?.imageview?.text=reader.readerIcon*/
持有者?.reader\u状态?.text=reader.readerStatus
持有者?.ward_name?.text=reader.wardName
持有者?.reader\u id?.text=reader.readerID
holder?.reader\u name?.text=reader.readerName
支架?.reader\u位置?.text=reader.readerLocation
if(reader.readerStatus.toLowerCase().equals(“yes”)){
holder.reader_name.setTextColor(Color.parseColor(“#24a314”))
}else if(reader.readerStatus.toLowerCase().equals(“no”)){
holder.reader_name.setTextColor(Color.parseColor(“#f4312d”))
支架.警告.设置可见性(视图.可见)
}
}
类ViewHolder(itemView:View):RecyclerView.ViewHolder(itemView){
val imageview=itemView.findViewById(R.id.imageview)作为按钮
val reader_name=itemView.findviewbyd(R.id.reader_name)作为文本视图
val reader_location=itemView.findViewById(R.id.floor_no)作为文本视图
val ward_name=itemView.findViewById(R.id.ward_name)作为文本视图
val reader_id=itemView.findviewbyd(R.id.reader_id)作为文本视图
val reader_status=itemView.findviewbyd(R.id.reader_status)作为文本视图
val warning=itemView.findViewById(R.id.warning)作为按钮
}
开放接口BtnClickListener{
趣味onBtnClick(位置:Int)
}
}

您只需要在初始化此适配器的相应活动中实现BtnClickListener。一旦实现了BtnClickListener,它将覆盖活动中的函数onBtnClick。 在适配器中需要做的唯一一件事是在所需元素上初始化onClickListener,在该方法中只需调用imageview.setOnClickListener{mClickListener?.onBtnClick(position)}。它将把职位送回活动中,你可以在那里执行你的特定任务。例如,我在一个活动中实现了ClickListener,并在那里打印了日志,它工作得很好。下面是它的演示代码

class Main2Activity : AppCompatActivity(), CustomAdapter.BtnClickListener {
    override fun onBtnClick(position: Int) {
        Log.d("Position", position.toString())
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main2)

        recyclerView.layoutManager = LinearLayoutManager(this, LinearLayout.VERTICAL, false)
        val readerResponseList = ArrayList<YourModelClassName>()
        val adapter = CustomAdapter(readerResponseList,this,this)
        recyclerView.adapter = adapter
    }
class Main2Activity:AppCompatActivity(),CustomAdapter.BtnClickListener{
覆盖趣味onBtnClick(位置:Int){
Log.d(“Position”,Position.toString())
}
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main2)
recyclerView.layoutManager=LinearLayoutManager(此,LinearLayout.VERTICAL,false)
val readerResponseList=ArrayList()
val adapter=CustomAdapter(readerResponseList,this,this)
recyclerView.adapter=适配器
}

希望有帮助。

您可以使用以下方法。这是Antonio Leiva的

假设您的数据类是
ReaderData

class CustomAdapter(val readers: List, val listener: (ReaderData) -> Unit) {

    /* Other methods */

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {

        /*...*/

        holder.imageview.setOnClickListener { 
            listener(readers[position]) 
        }
    }
}
现在在您的活动或片段中

recyclerview.adapter = CustomAdapter(readersList) { readerData ->
    Log.i(TAG, "${readerData.readerID} clicked")
}
这样做的目的是传递一个lambda,单击所需项目时将执行该lambda。

检查。