Android 具有连续位置计数的多视图类型的RecyclerView

Android 具有连续位置计数的多视图类型的RecyclerView,android,kotlin,android-recyclerview,android-view,Android,Kotlin,Android Recyclerview,Android View,有没有一种方法可以在一个RecyclerView中使用多种视图类型而不替换任何项目 对于位置0和我的RecyclerView中的每个第四个位置,我希望显示第二个视图类型,而不替换如果第一个视图类型存在,该位置将显示的内容。即显示第二视图类型,然后显示预期的第一视图类型 override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { when(holder) { is ViewH

有没有一种方法可以在一个RecyclerView中使用多种视图类型而不替换任何项目

对于位置0和我的RecyclerView中的每个第四个位置,我希望显示第二个视图类型,而不替换如果第一个视图类型存在,该位置将显示的内容。即显示第二视图类型,然后显示预期的第一视图类型

override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
    when(holder) {
        is ViewHolderA -> {
            MobileAds.initialize(mCtx) {}
            mAdView = holder.itemView.findViewById(R.id.adView)
            val adRequest = AdRequest.Builder().build()
            mAdView.loadAd(adRequest)
        }

        is ViewHolderB -> {
        val product = my[holder.adapterPosition]

        holder.tvTitle.text = product.itemTitle
        }
    }
}

override fun getItemViewType(position: Int): Int {
    return if (position % 4 == 0) {
        typeA
    } else {
        typeB
    }
}
预期结果

当前结果

将您的onBindViewHolder修改为从position-position/4-1绑定项目

这会回来的

position 0: -1 (ad so it doesnt apply)
position 1: 0 (item A)
position 2: 1 (item B)
position 3: 2 (item C)
position 4: 2 (ad so it doesnt apply)
position 5: 3 (item D)
etc.

我认为您需要在每个位置%4==0位置添加空项。我认为您需要写入。在onBindViewHolder中,从位置-position/4-1绑定项。@Pawel我已将onBindViewHolder方法添加到我的问题中。“这需要走哪一部分的方法?”MacaronLover说,“我觉得不太好。如何将位置0更改为文本视图类型而不是广告类型?如果您希望项目a位于位置0,则不要从计算中减去1,如果您希望另一个视图类型,只需将另一个案例添加到GetItemViewTypes中,不幸的是,它对我不起作用。我使用position-position/4,但现在列表以“Item B”开头。如果位置%4==0{需要更改,是否返回?显然是的,因为在此场景中仍然为位置0返回ad viewtype,您知道0的含义吗?我需要将位置%4==0更改为什么?
position 0: -1 (ad so it doesnt apply)
position 1: 0 (item A)
position 2: 1 (item B)
position 3: 2 (item C)
position 4: 2 (ad so it doesnt apply)
position 5: 3 (item D)
etc.