如何在kotlin的customadpter项目上实现clicklistener?
我想在recyclerview项目上实现onClickListener。 这是我的CustomAdapter.kt代码。
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) } } } }
我想从我的活动点击侦听器回调。
好吧,让我们分三步来做
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 } }
- 如何在android中获得当前年份?
- Android – 使功能为false /不运行
- Kotlin主要和次要建设者问题
- 咖啡测试Kotlin
- Firebase Perf不会运行测试应用程序:transformClassesWithFirebasePerformancePluginForDebugAndroidTest
- Kotlin在Android Studio上运行失败提示“Gradle同步失败:连接超时:连接请参阅IDE日志以获取更多详细信息(帮助|显示日志)”
- Android Kotlin受保护属性公开其私有类型ExpiresLayout
- 在apk中使用Kotlin构建DuplicateFileException
- 如何在anko中创建标签视图