Что вы хотите сделать, это создать 2 класса, которые расширяются ViewHolder
; один для обычного контента, а другой для просмотра рекламы. Вам нужно будет изменить некоторые из своих функций, чтобы использовать обобщенный c RecyclerView.ViewHolder
вместо вашего MyViewHolder
, так как он может быть либо одним.
В вашем onCreateViewHolder
вы захотите создайте одно или другое и верните его.
А затем в вашем onBindViewHolder
вы захотите загрузить / показать свое объявление.
class AdapterMain(
private val mCtx: Context,
var myList: MutableList<ItemRV>
) : androidx.recyclerview.widget.RecyclerView.Adapter<RecyclerView.ViewHolder>() {
private val myListFull = myList.toMutableList()
private var mClickListener: ItemClickListener? = null
private val itemRV = 1
private val itemAD = 2
override fun getItemViewType(position: Int): Int {
return if (position % 5 == 0) {
itemRV
} else {
itemAD
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) {
// Create an ad view holder
return if (viewType == itemAD) {
val v = LayoutInflater.from(mCtx).inflate(R.layout.ad_item, parent, false)
AdViewHolder(v)
} else {
val v = LayoutInflater.from(mCtx).inflate(R.layout.rv_item, parent, false)
MyViewHolder(v)
}
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
when(holder) {
// This is where you want to load/show the ad.
is AdViewHolder -> {
val adLoader = AdLoader.Builder(mCtx, "ca-app-pub-5544923106349792~1702536043")
.forUnifiedNativeAd { ad : UnifiedNativeAd ->
// Show the ad.
}
.withAdListener(object : AdListener() {
override fun onAdFailedToLoad(errorCode: Int) {
// Handle the failure by logging, altering the UI, and so on.
}
})
.withNativeAdOptions(
NativeAdOptions.Builder()
.build())
.build()
adLoader.loadAd(AdRequest.Builder().build())
}
is MyViewHolder -> {
val product = myList[holder.adapterPosition]
holder.tvTitle.text = product.itemName
}
}
}
override fun getItemCount(): Int {
return myList.size
}
inner class MyViewHolder(itemView: View) : androidx.recyclerview.widget.RecyclerView
.ViewHolder(itemView), View.OnClickListener {
var tvTitle: TextView = itemView.tv_title
}
inner class AdViewHolder(itemView: View) : androidx.recyclerview.widget.RecyclerView
.ViewHolder(itemView), View.OnClickListener {
// do any ad setup
}
interface ItemClickListener {
fun onItemClick(view: View, position: Int)
}
}