Recycler View显示相同的项目



我有一个arrayList<gt;的字符串,我添加了10个字符串。

private val names: ArrayList<String> = arrayListOf()

这些是添加的字符串

[G.I. Joe: The Rise of Cobra, Creed 2, The Equalizer 2, Ride Along 2, Mission Impossible, Mission Impossible II, Mission Impossible III, Mission Impossible: Ghost Protocol, Mission Impossible: Fallout, Suicide Squad]

我有一个带有适配器的回收器视图,如下所示:

class MovieSeriesAdapter(
private val movie: MoviesInSeries,
private val movieNameList: ArrayList<String>?,
private val restMoviesPosition: Int,
): RecyclerView.Adapter<MovieSeriesAdapter.ViewHolder>() {
class ViewHolder(binding: SeriesMoviesItemBinding): RecyclerView.ViewHolder(binding.root) {
val mainThing = binding.mainThing
val tvMovieNameAndYear = binding.seriesMovieNameAndYear
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
return ViewHolder(SeriesMoviesItemBinding.inflate(LayoutInflater.from(parent.context), parent,         false))
}
@SuppressLint("SetTextI18n")
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
if (position % 2 != 0) {
holder.mainThing.setBackgroundColor(Color.parseColor("#E8E8E8"))
}
val RestMoviesList = Constants.getRestOfSeriesMovies()
var targetPosition: Int = 0
when (movie.originalMovieName) {
"G.I. Joe: Retaliation" -> targetPosition = 0
"Creed" -> targetPosition = 1
"The Equalizer" -> targetPosition = 2
"Ride Along" -> targetPosition = 3
"Mission Impossible" -> targetPosition = 4
"Suicide Squad" -> targetPosition = 9
"Venom" -> targetPosition = 10

}

val targetMovieName = movieNameList!![targetPosition]

holder.tvMovieNameAndYear.text = "$targetMovieName ($targetMovieDate)"
}
override fun getItemCount(): Int {
return 5
}

问题是,有时我需要回收器视图来显示5个项目,如下例所示。例如,我有5部不可能完成任务的电影,我想放映它们。但是targetPosition是一个只有一个数字的整数变量。我试着创建一个只包含不可能完成的任务电影的数组列表,但它显示了相同的5个项目,所有数据都在一个项目中。如何做到当我需要显示5个项目时,每个项目都应该从名称数组列表中获得不同的值。

我建议您在设置文本值时,直接在onBindViewHolder内使用targetValue的position值。

您只需要给适配器一个要显示的5个的列表。

此外,您编写的许多代码也没有多大意义。

例如

when (movie.originalMovieName) {

在这里,您可以根据movie.originalMovieName来决定一些内容,但这个movie是在适配器的构造函数中传递的,这已经没有意义了,但这也意味着它将是每个项目的相同电影。

相关内容

最新更新