Android – как реализовать несколько ViewHolder для макета заголовка другого для макета модели в адаптере Firestore RecyclerView

Я пытаюсь сделать 2 держателя для просмотра, каждый будет всегда в позиции 0, который будет представлять собой заголовок для выбора изображения, другой для отображения модели, я могу сделать это для обычного адаптера recycliewiew, но в адаптере перехватчика firestore я не могу сделать это, я пытаюсь увеличить количество предметов на 1, но я получил

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

Это мой код класса адаптера:

 val TYPE_SELECT_IMAGE = 0 val TYPE_ITEMS = 1 class UsersImageAdapter(options: FirestoreRecyclerOptions<UserImage>) : FirestoreRecyclerAdapter<UserImage, RecyclerView.ViewHolder>(options) , AnkoLogger{ override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int, model: UserImage) { when(holder){ is SelectImageViewHolder -> { holder.bindModel() } is UserImageViewHolder -> { holder.bindImages(model) } } } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { return when (viewType) { TYPE_SELECT_IMAGE -> { val view = LayoutInflater.from(parent.context).inflate(R.layout.item_add_image, parent, false) SelectImageViewHolder(view) } TYPE_ITEMS -> { val view = LayoutInflater.from(parent.context).inflate(R.layout.item_image,parent,false) UserImageViewHolder(view) } else -> throw RuntimeException() } } override fun getItemViewType(position: Int): Int { return if (isPositionHeader(position)) { TYPE_SELECT_IMAGE } else { TYPE_ITEMS } } fun isPositionHeader(position: Int): Boolean { return position == 0 } override fun getItemCount(): Int { return super.getItemCount() + 1 } } 

и это два держателя вида один для заголовка, другой для отображения модели

 class SelectImageViewHolder(val view: View) : RecyclerView.ViewHolder(view) , AnkoLogger{ fun bindModel() { view.setOnClickListener { info { "clicked !" } } } } class UserImageViewHolder(val view: View) : RecyclerView.ViewHolder(view) { fun bindImages(userImage: UserImage) { val imageView = view.findViewById<ImageView>(R.id.image_user_post) Glide.with(view.context).load(userImage.imageUrl).into(imageView) } } 

моя цель – всегда держать SelectImageViewHolder в позиции 0

FirebaseUI здесь. onBindViewHolder(RecyclerView.ViewHolder, Int, Model) делает внутренний вызов getItem(position) внутренне, чтобы легко заполнить вашу модель. Поскольку вы вручную вводите элемент, RecyclerView будет думать, что есть элементы в базе данных и взорвется, как вы видели. Чтобы исправить это, вы захотите переопределить собственный onBindViewHolder(RecyclerView.ViewHolder, Int) без вызова super:

 override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { when(holder) { is SelectImageViewHolder -> holder.bindModel() is UserImageViewHolder -> { // Manually get the model item holder.bindImages(getItem(position - 1)) } } }