android - 具有多个视图类型的 RecyclerView,具有持续的位置计数
问题描述
有没有办法在不替换任何项目的情况下使用View
多种类型?RecyclerView
对于position
0 和 my 中的每 4 个position
,RecyclerView
我希望显示第 2View
种类型,而无需替换如果第 1View
种类型存在时该位置的内容。即显示第二种View
类型,然后显示预期的第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
}
}
预期结果
当前结果
解决方案
修改您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.
推荐阅读
- android - RecyclerView 绘图问题
- python - 错误:命令'C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\BIN\\x86_amd64\\cl.exe'
- unity3d - 如何在 Unity 的网格中执行布尔运算?
- reactjs - 将变量传递给容器内的 npm app
- python - aligning multiple signals with same shape but varying x's and y's (time and voltage)
- cmd - How do I echo parameter in batch file using a for loop
- ray - 如何在“火车”中间记录图像
- .net-core - Adfs 在 dotnet core aspboilerplate 上进行身份验证
- ios - Swift:模板定义中的常量
- protractor - 在 selenium 网格中针对 firefox 运行 Protractor 测试时,浏览上下文已被丢弃