【发布时间】:2019-04-17 17:33:27
【问题描述】:
我有简单的 RecyclerViewAdapter 类:
class TariffsCardAdapter(context: Context, tariffCardItems: List<ItemsItem?>?) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
private var context: Context? = null
private var tariffCardItems: ArrayList<ItemsItem?>? = null
init {
this.context=context
this.tariffCardItems=tariffCardItems as ArrayList<ItemsItem?>
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.layout_tariff_card_items, parent, false)
return TariffsCardAdapterViewHolder(view)
}
override fun getItemCount(): Int {
return tariffCardItems!!.size
}//getItemCount ends
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
val viewHolder = holder as TariffsCardAdapterViewHolder
Log.e("posX","pos:::".plus(position))
}
private inner class TariffsCardAdapterViewHolder : RecyclerView.ViewHolder {
var text: TextView? = null
constructor(row: View) : super(row) {
text= row.findViewById(R.id.text) as TextView
}
}
}
现在假设我的 tariffCardItems: List 在列表中只有 5 个我想显示的项目!
问题是当适配器第一次被实例化时; onBindViewHolder 方法调用了两次!
以便日志值打印为:
pos:::0
pos:::1
pos:::0
pos:::1
这意味着我的回收站视图位置将是1! 并且第一个视图将使用 list item at 1 index 创建,这是错误的,应该是 0
简单来说,recycler 视图的第一个子视图是由 1 个位置值创建的,这是错误的
谁能帮我弄清楚我做错了什么
提前致谢和问候
【问题讨论】:
-
不清楚是什么问题。 “回收站视图的第一个孩子是由错误的 1 个位置值创建的”——不,第一个位置是 0。我不知道你为什么认为它是 1,但是
RecyclerView会调用一些Adapter方法不确定的次数,没有保证的顺序,同时它正在设置自己。您不应该将其用作任何类型的索引。 -
是的,recyclerView 可能会以不确定的方式调用绑定方法。我不明白,为什么这是一个问题。 @Java Nerd 你能详细说明一下吗?
标签: android kotlin android-recyclerview