Мой RecyclerView продолжает повторять один и тот же элемент (Kotlin) - PullRequest
0 голосов
/ 04 апреля 2020

Итак, я создал RecyclerView для генерации напитков и по какой-то причине мой переработчик продолжает повторять первый элемент.

Я пытался использовать

       inner class ViewHolder(itemView: View)  : RecyclerView.ViewHolder(itemView) 

при использовании

       holder.itemView.text_view1.text = user.name 
       holder.itemView.text_view2.text = user.name 
       holder.itemView.text_View3.text = user.name 

и результаты совпадают.

Что вызывает повторение?

BeverageAdapter.kt

 class BeverageAdapter(val List:ArrayList<Beverage>) 
 RecyclerView.Adapter<BeverageAdapter.ViewHolder>() {

  class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {

    val textViewName2 = itemView.findViewById(R.id.text_view1) as TextView
    val texViewName3 = itemView.findViewById(R.id.text_view2) as TextView
    val textViewHello = itemView.findViewById(R.id.text_View3) as TextView


}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
    val v = LayoutInflater.from(parent.context).inflate(R.layout.list_activity, parent, false)
    return ViewHolder(v)
}

override fun getItemCount(): Int {
    return List.size
}

override fun onBindViewHolder(holder: ViewHolder, position: Int) {


    val user: Beverage = List[position]



    holder.textViewName2.text = user.name
    holder.texViewName3.text = user.name
    holder.textViewHello.text = user.name


}

}

Beverage.kt

data class Beverage(val name: String)

MainActivity.kt

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    val recyclerView = findViewById<RecyclerView>(R.id.item_recycler_view)


    recyclerView.setLayoutManager(LinearLayoutManager(this))

    val users = ArrayList<Beverage> ()

    users.add(Beverage("Coke"))
    users.add(Beverage("Gingerale"))
    users.add(Beverage("Rootbeer"))

    val adapter = BeverageAdapter(users)

    recyclerView.adapter = adapter
}
}

1 Ответ

0 голосов
/ 05 апреля 2020

Не используйте 3 разных TextView. Просто используйте один TextView и установите его в адаптере.

 RecyclerView.Adapter<BeverageAdapter.ViewHolder>() {

  class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {

    val textViewName1 = itemView.findViewById(R.id.text_view1) as TextView



}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
    val v = LayoutInflater.from(parent.context).inflate(R.layout.list_activity, parent, false)
    return ViewHolder(v)
}

override fun getItemCount(): Int {
    return List.size
}

override fun onBindViewHolder(holder: ViewHolder, position: Int) {


    val user: Beverage = List[position]



    holder.textViewName1.text = user.name



}

}

В RecyclerView в основном вы создаете одно представление, и оно повторяет столько данных, сколько имеется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...