在 RecyclerView 中重复项目
Repeating Items in RecyclerView
我知道以前有人问过这个问题,但老实说,我找不到正确的解决方案。我不知道为什么在滚动 RecyclerView 后,适配器一遍又一遍地生成相同的数据。
我有一个项目使用改造从 api 服务器获取数据并将其显示在 RecyclerView 上。我正在正确接收数据并且接收列表没有任何重复项。在将数据传递到我的 Activity 中的 RecyclerAdapter 之前,我记录了数据,但一切看起来都很好。所以我认为问题出在适配器上。
PS。当我 运行 应用程序并将 RecyclerView 滚动到最后时,“记录”在适配器中,returns 独特的项目。我觉得我绑定数据有误
Log.i("test",data[position].toString())
这是我的适配器:
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide
import com.example.cocktailrecipes.apiManager.model.category
import com.example.cocktailrecipes.databinding.TemplateRecyclerViewCategoryBinding
class CategoryAdapter(private val data: List<category.Drink>) : RecyclerView.Adapter<CategoryAdapter.Holder>() {
lateinit var binding: TemplateRecyclerViewCategoryBinding
inner class Holder(itemView: View) : RecyclerView.ViewHolder(itemView) {
fun bindData(drinkData:category.Drink) {
binding.txtDrinkName.text = drinkData.strDrink
Glide.with(binding.root)
.load(drinkData.strDrinkThumb)
.into(binding.imgDrink)
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): Holder {
binding = TemplateRecyclerViewCategoryBinding.inflate(LayoutInflater.from(parent.context),parent,false)
return Holder(binding.root)
}
override fun onBindViewHolder(holder: Holder, position: Int) {
Log.i("test",data[position].toString())
holder.bindData(data[position])
}
override fun getItemCount(): Int {
return data.size
}
}
对于Holder,将itemView设为val,然后在bindData中调用:
itemView.txtDrinkName.text = drinkData.strDrink
绑定只是一个 class 属性,我不确定它如何知道哪个视图与特定持有者关联。
非常感谢@Tenfour04
我采纳了你的建议并解决了我的问题:
class CategoryAdapter(private val data: List<category.Drink>) : RecyclerView.Adapter<CategoryAdapter.Holder>() {
inner class Holder(private val binding: TemplateRecyclerViewCategoryBinding) : RecyclerView.ViewHolder(binding.root) {
fun bindData(drinkData:category.Drink) {
binding.txtDrinkName.text = drinkData.strDrink
Glide.with(binding.root)
.load(drinkData.strDrinkThumb)
.into(binding.imgDrink)
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): Holder {
val binding = TemplateRecyclerViewCategoryBinding.inflate(LayoutInflater.from(parent.context),parent,false)
return Holder(binding)
}
override fun onBindViewHolder(holder: Holder, position: Int) {
Log.i("test",data[position].toString())
holder.bindData(data[position])
}
override fun getItemCount(): Int {
return data.size
}
}
我知道以前有人问过这个问题,但老实说,我找不到正确的解决方案。我不知道为什么在滚动 RecyclerView 后,适配器一遍又一遍地生成相同的数据。
我有一个项目使用改造从 api 服务器获取数据并将其显示在 RecyclerView 上。我正在正确接收数据并且接收列表没有任何重复项。在将数据传递到我的 Activity 中的 RecyclerAdapter 之前,我记录了数据,但一切看起来都很好。所以我认为问题出在适配器上。
PS。当我 运行 应用程序并将 RecyclerView 滚动到最后时,“记录”在适配器中,returns 独特的项目。我觉得我绑定数据有误
Log.i("test",data[position].toString())
这是我的适配器:
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide
import com.example.cocktailrecipes.apiManager.model.category
import com.example.cocktailrecipes.databinding.TemplateRecyclerViewCategoryBinding
class CategoryAdapter(private val data: List<category.Drink>) : RecyclerView.Adapter<CategoryAdapter.Holder>() {
lateinit var binding: TemplateRecyclerViewCategoryBinding
inner class Holder(itemView: View) : RecyclerView.ViewHolder(itemView) {
fun bindData(drinkData:category.Drink) {
binding.txtDrinkName.text = drinkData.strDrink
Glide.with(binding.root)
.load(drinkData.strDrinkThumb)
.into(binding.imgDrink)
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): Holder {
binding = TemplateRecyclerViewCategoryBinding.inflate(LayoutInflater.from(parent.context),parent,false)
return Holder(binding.root)
}
override fun onBindViewHolder(holder: Holder, position: Int) {
Log.i("test",data[position].toString())
holder.bindData(data[position])
}
override fun getItemCount(): Int {
return data.size
}
}
对于Holder,将itemView设为val,然后在bindData中调用: itemView.txtDrinkName.text = drinkData.strDrink
绑定只是一个 class 属性,我不确定它如何知道哪个视图与特定持有者关联。
非常感谢@Tenfour04
我采纳了你的建议并解决了我的问题:
class CategoryAdapter(private val data: List<category.Drink>) : RecyclerView.Adapter<CategoryAdapter.Holder>() {
inner class Holder(private val binding: TemplateRecyclerViewCategoryBinding) : RecyclerView.ViewHolder(binding.root) {
fun bindData(drinkData:category.Drink) {
binding.txtDrinkName.text = drinkData.strDrink
Glide.with(binding.root)
.load(drinkData.strDrinkThumb)
.into(binding.imgDrink)
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): Holder {
val binding = TemplateRecyclerViewCategoryBinding.inflate(LayoutInflater.from(parent.context),parent,false)
return Holder(binding)
}
override fun onBindViewHolder(holder: Holder, position: Int) {
Log.i("test",data[position].toString())
holder.bindData(data[position])
}
override fun getItemCount(): Int {
return data.size
}
}