我没有向我的RecyclerView添加任何数据,但它显示了一个空框(我在数据的布局中设置的那个)无论如何。它崩溃了这个错误消息
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
这是我的customAdapter:
class CustomAdapterExercise(var exerciseList: ArrayList<Exercise>, val addList: ArrayList<textAdd>) : RecyclerView.Adapter<CustomAdapterExercise.ViewHolder>() {
val typeAdd = 0
val typeExercise = 1
override fun getItemViewType(position: Int): Int {
if (position == exerciseList.size + 1) {
return typeAdd
}
else{
return typeExercise
}
}
//this method is returning the view for each item in the list
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CustomAdapterExercise.ViewHolder {
if (viewType == typeExercise) {
val itemView = LayoutInflater.from(parent.context).inflate(R.layout.exercise_layout, parent, false)
return ViewHolder(itemView)
} else {
val itemView = LayoutInflater.from(parent.context).inflate(R.layout.add_layout, parent, false)
return ViewHolder(itemView)
}
}
//this method is binding the data on the list
override fun onBindViewHolder(holder: CustomAdapterExercise.ViewHolder, position: Int) {
if (holder.itemViewType == typeAdd) {
holder.bindAdd(addList[0])
}
else{
if(position != exerciseList.size){
holder.bindItems(exerciseList[position])
}
}
}
//this method is giving the size of the list
override fun getItemCount(): Int {
return exerciseList.size + 2
}
//the class is hodling the list view
class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
fun bindItems(Exercise: Exercise) {
var exerciseAmount = itemView.findViewById<TextView>(R.id.exerciseAmount)
if(exerciseAmount != null){
exerciseAmount.text = Exercise.exAmount
}
}
fun bindAdd(textAdd: textAdd){
val addText = itemView.findViewById<TextView>(R.id.addText)
if(addText != null){
addText.text = textAdd.textAdd
}
}
}
}
即使我添加了一些数据,它仍然会在那里产生一个空盒子,我不明白为什么。 我想知道怎样才能阻止它永远制作一个空盒子?
答案 0 :(得分:1)
这些是在RecyclerView中计算索引的问题:
在getItemCount中它应该是+ 1,而不是+ 2,因为它只需要添加一个额外的项目来添加按钮。
在列表末尾的getItemViewType位置,如果列表长度,而不是列表长度+1。这是因为位置是0索引的。因此,例如,如果您有5个项目,则位置0-4将是您的锻炼项目,然后位置5(位置== exerciseList.size)将是一个添加项目。
在getItemViewType中为位置和生成的视图类型添加日志有助于调试,因为它显示了哪些位置的计算速度非常快。