Как создать onclick событие в адаптере с помощью интерфейса Android?

Как я могу создать событие click с использованием интерфейса?

В моем приложении я создал интерфейс щелчка щелчка, чтобы обнаружить щелчок на элементах адаптера в родительской активности. После создания интерфейса и метода в адаптере, как я могу использовать этот интерфейс для вызова прослушивателя?

Пожалуйста, проверьте этот код, он отлично работает для меня.

Сначала создайте класс адаптера.

class ChapterAdapter(private val activity: Activity, val mWords: ArrayList<Chapter>, val btnlistener: BtnClickListener) : RecyclerView.Adapter<ChapterAdapter.ViewHolder>() { companion object { var mClickListener: BtnClickListener? = null } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { val layoutInflater = LayoutInflater.from(parent.context) return ViewHolder(layoutInflater.inflate(R.layout.layout_capter_raw, parent, false)) } override fun onBindViewHolder(holder: ViewHolder?, position: Int) { mClickListener = btnlistener val item = mWords[position] holder.layout_chapter_name.setOnClickListener(object : View.OnClickListener { override fun onClick(v: View?) { if (mClickListener != null) mClickListener?.onBtnClick(position) } }) } override fun getItemCount(): Int { return mWords.size } override fun getItemId(position: Int): Long { return super.getItemId(position) } override fun getItemViewType(position: Int): Int { return super.getItemViewType(position) } class ViewHolder(view: View) : RecyclerView.ViewHolder(view) { val txt_capter_name = view.txt_capter_name } open interface BtnClickListener { fun onBtnClick(position: Int) } } 

После создания и объявления адаптера в своей деятельности или фрагменте.

 listAdapter = ChapterAdapter(activity, _arrChapterList, object : ChapterAdapter.BtnClickListener { override fun onBtnClick(position: Int, chapter_id: String, chapter_size: String, chapter_name: String) { toast(chapter_id + " = " + chapter_size, Toast.LENGTH_LONG) } }) 

В Kotlin правильный способ сделать это, использует обратные вызовы вместо Java Interfaces . Пример:

 class MyAdapter(private val callback: (YourModel) -> Unit) { override fun onBindViewHolder(holder: DataBoundViewHolder<YourModel>, position: Int) { bind(holder.binding, items!![position]) holder.binding.executePendingBindings() holder.binding.root.setOnClickListener { callback(binding.model) } } } 

И создайте адаптер где-нибудь, используя

 MyAdapter myAdapter = MyAdapter( { println{"Clicked $it"} }) 

Изменить: Поскольку Asker хотел бы видеть полный рабочий код, я использовал код от Sumit и заменил интерфейсы на Kotlin-Callbacks.

 class ChapterAdapter(private val activity: Activity, val mWords: ArrayList<Chapter>, val callback: (Any) -> Unit) : RecyclerView.Adapter<ChapterAdapter.ViewHolder>() { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { val layoutInflater = LayoutInflater.from(parent.context) return ViewHolder(layoutInflater.inflate(R.layout.layout_capter_raw, parent, false)) } override fun onBindViewHolder(holder: ViewHolder?, position: Int) { val item = mWords[position] holder.layout_chapter_name.setOnClickListener( callback {$it}) } override fun getItemCount(): Int = mWords.size override fun getItemId(position: Int): Long = super.getItemId(position) override fun getItemViewType(position: Int): Int = super.getItemViewType(position) class ViewHolder(view: View) : RecyclerView.ViewHolder(view) { val txt_capter_name = view.txt_capter_name } 

и, наконец, создание адаптера

 listAdapter = ChapterAdapter(activity, _arrChapterList, { toast( "Clicked $it", Toast.LENGTH_LONG) })