Android 具有连续位置计数的多视图类型的RecyclerView
有没有一种方法可以在一个RecyclerView中使用多种视图类型而不替换任何项目 对于位置0和我的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
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.