我知道以前有人問過這個問題,但老實說,我找不到正確的解決方案。我不知道為什么在滾動 RecyclerView 后,配接器一遍又一遍地制作相同的資料。
我有一個專案使用改造從 api-server 獲取資料并將其顯示在 RecyclerView 上。我正在正確接收資料,并且接收的串列沒有任何重復的專案。就在我的 Activity 中將資料傳遞給 RecyclerAdapter 之前,我記錄了資料,但一切看起來都很好。所以我認為問題是配接器。
PS。當我運行應用程式并將 RecyclerView 滾動到最后時,配接器內的“日志”回傳獨特的專案。我認為我在系結資料方面有錯誤。
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
}
}
uj5u.com熱心網友回復:
非常感謝@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
}
}
uj5u.com熱心網友回復:
對于 Holder 使 itemView 成為 val,然后在 bindData 中呼叫: itemView.txtDrinkName.text = DrinkData.strDrink
binding 只是一個類屬性,我不確定它如何知道與特定持有者相關聯的視圖。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/450066.html
