RecyclerView agrega un elemento de layout "vacío" y cuando lo hago clic en la aplicación se bloquea

No agregué ningún dato a mi RecyclerView, pero muestra una caja vacía (la que diseñé en los layouts para mis datos) de todos modos. Se bloquea con este post de error

java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 

Aquí está mi Adaptador personalizado:

 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 } } } } 

Incluso si agrego algunos datos, sigue produciendo un cuadro vacío y no entiendo por qué. Me pregunto cómo puedo evitar que produzca siempre una caja vacía.

    Estos son problemas con el cálculo del índice en RecyclerView:

    En getItemCount, debe ser +1, en lugar de +2, ya que solo necesita agregar un elemento adicional para agregar el button.

    En la position getItemViewType al final de la list si la longitud de la list, en lugar de la longitud de la list +1. Esto se debe a que la position está indexada en 0. Entonces, por ejemplo, si tiene 5 elementos, las posiciones 0-4 serán sus elementos de ejercicio, y luego la position 5 (position == exerciseList.size) será un elemento adicional.

    Agregar loggings en getItemViewType para position y tipo de vista generada es útil para la debugging, ya que muestra qué posiciones se calculan incorrectamente muy rápidamente.