如何从列表中的点击项中获取id



我有一个回收器视图适配器,我把电影列表传给那里。每个项目都有一个id、poster_path、标题、概述、流派和运行时。我需要检测用户点击了什么项目,并将其id、标题和其他信息传递给另一个活动。这听起来不是很难,但由于某种原因,它对我不起作用。你能帮我吗?

class MoviesRecyclerAdapter() : RecyclerView.Adapter<MoviesRecyclerAdapter.RecyclerViewHolder>() {
private var poster: String = "https://image.tmdb.org/t/p/w500"
private var mylist = mutableListOf<MovieAndDetailsUi>()

class RecyclerViewHolder(val binding: StarMovieRecycleItemBinding) :
RecyclerView.ViewHolder(binding.root) {
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerViewHolder {
val binding =
StarMovieRecycleItemBinding.inflate(LayoutInflater.from(parent.context), parent, false)
return RecyclerViewHolder(binding);
}
override fun onBindViewHolder(holder: RecyclerViewHolder, position: Int) {
val recyclerViewItem = mylist.get(position)
with(holder) {
with(mylist[position]) {
//Log.d("test", mylist.toString())
binding.posterIv.load(poster + recyclerViewItem.poster_path)
binding.movieTitleTv.text = recyclerViewItem.title
binding.genreTv.text = recyclerViewItem.genres.get(0).name
binding.movieDurationTv.text = convertTime(mylist.get(position).runtime)
}
}
holder.itemView.setOnClickListener {
val id: String = holder.itemView.id.toString()
val intent = Intent(holder.binding.root.context, DetailsActivity::class.java)
intent.putExtra("id", id)
//intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK //TODO add movie id to extras
holder.binding.root.context.startActivity(intent)
}
}

override fun getItemCount(): Int = mylist.size
fun setSomeList(list: MutableList<MovieAndDetailsUi>) {
mylist.addAll(list)
notifyDataSetChanged()
}
fun convertTime(duration: Int):String{
val hours = duration/60
val min = duration % 60
return String.format("%2dhr %02dm", hours, min)
}
} 

将onClick函数作为输入参数添加到MoviesRecyclerAdapter的构造函数中,如下所示:

class MoviesRecyclerAdapter(private val onItemClick: (MovieAndDetailsUi) -> Unit) : RecyclerView.Adapter<MoviesRecyclerAdapter.RecyclerViewHolder>() {
...
}

现在,当您创建MoviesCyclerAdapter实例时,您可以定义一个函数,以便在单击某个项目时运行。你可以这样做:

val adapter = MoviesRecyclerAdapter({ item ->
// On click functionality here
// For example, you could do myApiRequest(item.id)
})

然后,在适配器中的onBindViewHolder()中,您可以更改您的点击侦听器,以调用您在构建适配器时设置的函数:

holder.itemView.setOnClickListener {
onItemClick(recyclerViewItem)
}

最新更新