RecyclerView с несколькими типами просмотра с непрерывным подсчетом позиций - PullRequest
0 голосов
/ 26 января 2020

Есть ли способ использовать несколько View типов в RecyclerView без замены каких-либо элементов?

Для position 0 и каждого 4-го position в моем RecyclerView, я хочу 2-й тип View должен отображаться без замены того, что было бы в этой позиции, если бы существовал 1-й тип View. Т.е. покажите 2-й View тип, а затем предполагаемый 1-й View тип.

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

Ожидаемый результат

enter image description here

Текущий результат

enter image description here

enter image description here

1 Ответ

1 голос
/ 26 января 2020

Измените вас onBindViewHolder, чтобы связать элементы из position - position / 4 - 1.

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 positionToBind = position - position / 4 - 1
            val product = my[positionToBind]
            holder.tvTitle.text = product.itemTitle
        }
    }
}

Это вернет

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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...