2017-08-13 52 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 
    } 
}