Recycler View 显示相同的项目

Recycler View shows identical items

我有一个字符串 arrayList<>,我向其中添加了 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 个项目时,每个项目都应该从名称数组列表中获得不同的值。

我建议你在设置text的值时直接使用onBindViewHolder中targetValue的position值。

您应该只向适配器提供您要显示的 5 个列表。

另外,你写的很多代码都没有多大意义。

例如

  when (movie.originalMovieName) {

你在这里根据 movie.originalMovieName 决定了一些东西,但是这个 movie 是在适配器的构造函数中传递的,这已经没有意义了,但这也意味着它将是每个项目都是同一部电影。