【发布时间】:2020-12-26 08:19:34
【问题描述】:
我有一个包含 n 条评论的 recycleView。每条评论都有一个昵称、正文和一个button,如果有问题,我有机会报告我的评论。问题是我不知道如何在点击时检索这些信息。有人可以给我看一些代码草稿吗?
【问题讨论】:
标签: java android android-studio android-recyclerview android-button
我有一个包含 n 条评论的 recycleView。每条评论都有一个昵称、正文和一个button,如果有问题,我有机会报告我的评论。问题是我不知道如何在点击时检索这些信息。有人可以给我看一些代码草稿吗?
【问题讨论】:
标签: java android android-studio android-recyclerview android-button
在您的 RecyclerView 类上覆盖以下内容:
@Override
public void onViewAttachedToWindow(@NonNull MyViewHolder holder) {
super.onViewAttachedToWindow(holder);
//assuming your 'body' is TextView:
TextView tv = holder.body; //body should have been set in your ViewHolder inner class
Button button = holder.button; //assume button was defined in your ViewHolder inner class
//now you have a reference to your objects!
}
【讨论】:
一个简洁的方法是制作一个界面,这里我举个例子。
class NewsAdapter(private val noticias: List<Noticia>, private val layout: Int, private val activity: Activity, private val listener: OnItemClickListener) : RecyclerView.Adapter<NewsAdapter.ViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val view = LayoutInflater.from(parent.context).inflate(layout, parent, false)
return ViewHolder(view)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.bind(noticias[position], listener)
}
override fun getItemCount() = noticias.size
// ViewHolder
inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
fun bind(noticia: Noticia, listener: OnItemClickListener) {
itemView.textViewNewsTitulo.text = noticia.titulo
Glide.with(activity)
.load(noticia.foto_url)
.fitCenter()
.placeholder(R.drawable.placeholder)
.into(itemView.imageViewNews)
itemView.textViewNewsDesc.text = noticia.desc
// bind the click listener with the itemView
itemView.setOnClickListener { listener.onItemClick(noticia, adapterPosition) }
}
}
// Interface onClick define in adapter adapter
interface OnItemClickListener {
fun onItemClick(noticia: Noticia?, posicion: Int)
}
}
要在您的活动中使用,您需要实现这样的接口。
class HomeActivity : BaseActivity(), NewsAdapter.OnItemClickListener
接口强制你实现活动中的方法。
override fun onItemClick(noticia: Noticia?, posicion: Int) {
// do your logic on click
}
【讨论】: