2017-08-13 31 views
2

我想在recyclerview項目上實現onClickListener。這裏是我的CustomAdapter.kt代碼。如何在kotlin的customadpter項目上實現clicklistener?

package com.png.kotlinsample 

/** 
* Created by admin on 13-08-2017. 
*/ 
import android.support.v7.widget.RecyclerView 
import android.view.LayoutInflater 
import android.view.View 
import android.view.ViewGroup 
import android.widget.TextView 

/** 
* Created by prashant on 6/19/2017. 
*/ 

class CustomAdapter(val userList: ArrayList<User>, val listener: (User) -> Unit) : RecyclerView.Adapter<CustomAdapter.ViewHolder>() { 

    //this method is returning the view for each item in the list 
     class MyAdapter(val userList: ArrayList<User>) 
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CustomAdapter.ViewHolder { 
     val v = LayoutInflater.from(parent.context).inflate(R.layout.row_layout, parent, false) 
     return ViewHolder(v) 
    } 

    //this method is binding the data on the list 
    override fun onBindViewHolder(holder: CustomAdapter.ViewHolder, position: Int) { 
     holder.bindItems(userList[position],listener) 
    } 

    //this method is giving the size of the list 
    override fun getItemCount(): Int { 
     return userList.size 
    } 

    //the class is hodling the list view 
    class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { 

     fun bindItems(user: User, listener: (User) -> Unit) = with(itemView) { 
      val textViewName = itemView.findViewById(R.id.textViewUsername) as TextView 
      val textViewAddress = itemView.findViewById(R.id.textViewAddress) as TextView 
      textViewName.text = user.name 
      textViewAddress.text = user.address 
      setOnClickListener { listener(user) } 
     } 




    } 
} 

我想從我的活動點擊偵聽器回調。

+0

你想,當你在一個項目點擊獲取用戶點擊的對象在活動?\ –

回答

0

好吧,讓我們做它在3個步驟

1-您定義具有的onClick方法的接口爲您的回調 就像在你的適配器本

interface UserClickCallbacks { 
    fun onUserClick(user: User) 
} 

2-第二你在添加點擊監聽器與呼叫這樣

編輯的接口方法的視圖支架

class CustomAdapter(val userList: ArrayList<User>, private val userClickCallbacks: UserClickCallbacks) : RecyclerView.Adapter<CustomAdapter.ViewHolder>() { 

    //this method is returning the view for each item in the list 
    class MyAdapter(val userList: ArrayList<User>) 

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

    //this method is binding the data on the list 
    override fun onBindViewHolder(holder: CustomAdapter.ViewHolder, position: Int) { 
     holder.textViewName.text = user.name 
     holder.textViewAddress.text = user.address 
    } 

    //this method is giving the size of the list 
    override fun getItemCount(): Int { 
     return userList.size 
    } 

    //the class is hodling the list view 
    class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), View.OnClickListener { 

     init { 
      view.setOnClickListener(this) 
     } 
      val textViewName = itemView.findViewById(R.id.textViewUsername) 
      val textViewAddress = itemView.findViewById(R.id.textViewAddress) 

      override fun onClick(p0: View?) { 
       userClickCallbacks.onUserClick(userList[adapterPosition]) 
      } 


    } 
} 

3-在您的活動您實現UserClickCallbacks接口 的並重寫onUserClick()方法這樣

class UserActivity : AppCompatActivity(), UserClickCallbacks { 

    // your activity code 

    override fun onUserClick(user: User) { 
     // but the user click event logic here 
     // This triggered when user in tha adapter clicked 
    } 
} 
相關問題