RecyclerView OnClickListener using interface

后端 未结 11 772
清歌不尽
清歌不尽 2020-12-01 09:49

I use RecyclerView adapter to display data inside an activity, I want to implement onClickListener inside the activity, currently, I am setting

11条回答
  •  离开以前
    2020-12-01 09:59

    [BEST SOLUTION]

    In my way, I just created a single instance of ClickListener, And it dispatches click event to both RecyclerView and Activity or Fragment:

    class LeagueAdapter(onLeagueSelected: (League, Int, View) -> Unit) : 
    RecyclerView.Adapter() {
    
        val dataSet = arrayListOf()
    
        private val clickListener = View.OnClickListener {
            it?.let  {
                val adapterPosition = it.tag as Int
                onLeagueSelected(dataSet[adapterPosition], adapterPosition, it)
    
                // perform adapter related action here ...
            }
        }
    
    
        override fun getItemCount(): Int {
            return dataSet.size
        }
    
        override fun onBindViewHolder(holder: LeagueHolder, position: Int) {
            // put item position in tag field
            holder.itemView.tag = position
            holder.itemView.setOnClickListener(clickListener)
        }
    
    }
    

    And inside Activity, we have something like this:

    private val headerAdapter = LeagueAdapter { league, i, view ->
        Log.e(TAG, "item clicked $i")
    }
    

提交回复
热议问题