我有一个名为 ArticleAdapter
的recyclerView适配器
import kotlinx.android.synthetic.main.articlerecycler_item.view.*
class ArticleAdapter(private val controller: IController) : RecyclerView.Adapter<ArticleViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ArticleViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.articlerecycler_item, parent, false)
return ArticleViewHolder(view)
}
// How implement a button click for `btnSave`
/** Called when the user taps the Save button */
btnSave.setOnClickListener(){
(R.layout.articlerecycler_item)
AlertDialog.Builder(this)
.setMessage("Article Saved.")
.create()
.show()
// Do something in response to button click
}
override fun getItemCount(): Int {
return controller.articles.size
}
override fun onBindViewHolder(holder: ArticleViewHolder, position: Int) {
val article: Article = controller.articles[position]
if(article.title.length > 100) {
holder.itemView.titleTv.text = "${article.title.substring(0, 99)}..."
} else {
holder.itemView.titleTv.text = article.title
}
holder.itemView.authorTv.text = article.author
}
}
class ArticleViewHolder(view: View?) : RecyclerView.ViewHolder(view)
然后在我的recyclerView布局中,我有一个按钮
<Button
android:id="@+id/btnSave"
android:layout_width="70dp"
android:layout_height="40dp"
android:onClick="btnSave"
android:text="@string/save"
android:textAlignment="center" />
我在 onBindViewHolder
内处理这个事件吗?我不确定如何在我的recyclerView适配器中实现监听器
3 回答
我想你应该添加一个扩展列表 . 这是https://dzone.com/articles/click-listener-for-recyclerview-adapter . 此外,您必须为保存按钮添加自定义列表器 .
处理适配器项目点击的一个很好的解决方案是将它们传递给创建它们的活动或片段 .
使用kotlin,您可以使用函数定义而不是接口来完成这项简单的工作,因此在您的适配器类中添加函数类型的
var
:在
ViewHolder
类中设置了监听器,如下所示:最后,在您的活动或片段中,您可以通过添加新的侦听器轻松访问项目:
请注意,在
ViewHolder
构造函数(init
)中设置侦听器更有效,因为不必为每个数据绑定设置侦听器 .您必须在
onBindViewHolder()
中处理它,但负责创建和显示AlertDialog
的逻辑不应位于RecyclerView中 . 您需要创建一个接口,该接口负责将适配器中的onClick()
事件信息传递给activity / fragment,并且您应该显示AlertDialog
.现在通过
setListener()
方法将OnClickListener
的实例从您的活动传递到适配器 .