Java 如何在Recyclerview GridLayout之间添加Admob广告

Java 如何在Recyclerview GridLayout之间添加Admob广告,java,android,kotlin,android-recyclerview,admob,Java,Android,Kotlin,Android Recyclerview,Admob,我正在尝试在RecyclerView中实现Admob广告。我尝试了很多例子,但都失败了。我想在我的RecyclerView的3个项目之间插入一个广告,我正在使用带有Admob横幅的GridLayout。我希望我的应用程序视图如下所示。任何帮助都将不胜感激 我的RecyclerView适配器 class ProductAdapter(private val userList: ArrayList<Model.ProductList>, private val context: C

我正在尝试在RecyclerView中实现Admob广告。我尝试了很多例子,但都失败了。我想在我的RecyclerView的3个项目之间插入一个广告,我正在使用带有Admob横幅的GridLayout。我希望我的应用程序视图如下所示。任何帮助都将不胜感激

我的RecyclerView适配器

  class ProductAdapter(private val userList: ArrayList<Model.ProductList>, private val context: Context, private val which: String) : androidx.recyclerview.widget.RecyclerView.Adapter<RecyclerView.ViewHolder>() {

override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
    if (holder.itemViewType == 0) {
        holder as MyViewHolder2
        val adRequest = AdRequest.Builder().build()
        holder.adView.loadAd(adRequest)
        holder.adView.adListener = object : AdListener() {
            override fun onAdFailedToLoad(errorCode: Int) {
                Log.d("errorCode", errorCode.toString())
            }
        }
    } else {
        holder as MyViewHolder

        val magazineList: Model.ProductList = userList[position]
        Glide.with(context).load(magazineList.featured_image)
            .thumbnail(0.5f)
            .into(holder.image)

        holder.title.text = magazineList.post_title
        holder.views.text = magazineList.count
        holder.date.text = magazineList.offer_valid

        }
    }
}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
    if (viewType == 0) {
        return MyViewHolder2(LayoutInflater.from(parent.context).inflate(R.layout.ad_list_row, parent, false))
    } else {
        return MyViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.product_list_row, parent, false))

    }
}

override fun getItemCount(): Int {
    return userList.size
}

override fun getItemViewType(position: Int): Int {
    return if (position>0 && position % 3== 0) {
        0
    } else {
        1
    }
  }

class MyViewHolder(itemView: View) : androidx.recyclerview.widget.RecyclerView.ViewHolder(itemView) {
    var image: ImageView = itemView.findViewById(R.id.productImage)
    var title: TextView = itemView.findViewById(R.id.title)
    var views: TextView = itemView.findViewById(R.id.views)
    var date: TextView = itemView.findViewById(R.id.date)
    var next: androidx.cardview.widget.CardView = itemView.findViewById(R.id.next)
}

class MyViewHolder2(itemView: View) : androidx.recyclerview.widget.RecyclerView.ViewHolder(itemView) {
    var adView: AdView = itemView.findViewById(R.id.adView)
}
}
class-ProductAdapter(private-val-userList:ArrayList,private-val-context:context,private-val-which:String):androidx.recyclerview.widget.recyclerview.Adapter(){
覆盖onBindViewHolder(holder:RecyclerView.ViewHolder,位置:Int){
如果(holder.itemViewType==0){
作为MyViewHolder2的持有者
val adRequest=adRequest.Builder().build()
holder.adView.loadAd(地址请求)
holder.adView.adListener=对象:adListener(){
覆盖失败的TOLOAD上的乐趣(错误代码:Int){
Log.d(“errorCode”,errorCode.toString())
}
}
}否则{
作为MyViewHolder的holder
val magazineList:Model.ProductList=用户列表[位置]
Glide.with(context.load)(magazineList.featured_image)
.缩略图(0.5f)
.插入(支架.图像)
holder.title.text=magazineList.post\u title
holder.views.text=magazineList.count
holder.date.text=magazineList.offer\u有效
}
}
}
override fun onCreateViewHolder(父级:ViewGroup,viewType:Int):RecyclerView.ViewHolder{
如果(viewType==0){
返回MyViewHolder2(LayoutFlater.from(parent.context)。充气(R.layout.ad_list_行,parent,false))
}否则{
返回MyViewHolder(LayoutFlater.from(parent.context)。充气(R.layout.product\u list\u行,parent,false))
}
}
重写getItemCount():Int{
返回userList.size
}
覆盖getItemViewType(位置:Int):Int{
如果(位置>0&&位置%3==0)返回{
0
}否则{
1.
}
}
类MyViewHolder(itemView:View):androidx.recyclerview.widget.recyclerview.ViewHolder(itemView){
var image:ImageView=itemView.findViewById(R.id.productImage)
变量标题:TextView=itemView.findViewById(R.id.title)
变量视图:TextView=itemView.findViewById(R.id.views)
变量日期:TextView=itemView.findViewById(R.id.date)
var next:androidx.cardwiew.widget.cardwiew=itemView.findviewbyd(R.id.next)
}
类MyViewHolder2(itemView:View):androidx.recyclerview.widget.recyclerview.ViewHolder(itemView){
var adView:adView=itemView.findviewbyd(R.id.adView)
}
}
我正在尝试在recyclerview中添加Admob横幅

我的xml文件

ad_list_row.xml

  <RelativeLayout xmlns:ads="http://schemas.android.com/apk/res-auto"
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
<com.google.android.gms.ads.AdView

        android:id="@+id/adView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="10dp"
        android:background="@color/colorAccent"
        ads:adSize="BANNER"
        ads:adUnitId="@string/banner_ad_unit_id_TEST"/>
       </RelativeLayout>
 <androidx.cardview.widget.CardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/next"
    android:layout_width="match_parent"
    android:layout_height="205dp"
    android:layout_gravity="center"
    android:layout_marginStart="3dp"
    android:layout_marginTop="6dp"
    android:layout_marginEnd="4dp"
    android:layout_marginBottom="7dp"
    card_view:cardCornerRadius="4dp">
<RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
>
    <ImageView android:layout_width="match_parent"
               android:layout_height="150dp"
               android:scaleType="matrix"
               android:padding="4dp"
               android:contentDescription="@string/app_name"
               android:id="@+id/productImage"
    />

    <TextView android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="@string/title"
              android:textSize="14sp"
              android:id="@+id/title"
              android:textStyle="bold"
              android:textColor="@color/colorText2"
              android:padding="5dp"
              android:layout_marginStart="5dp"
              android:layout_below="@+id/productImage"
              android:lines="1"
              android:ellipsize="end"
    />
    <LinearLayout android:layout_width="match_parent"
                  android:layout_height="wrap_content"
                  android:layout_below="@+id/title"
                  android:weightSum="1"
    >
        <TextView android:layout_width="match_parent"
                  android:layout_height="wrap_content"
                  android:textSize="10sp"
                  android:textStyle="italic"
                  android:id="@+id/date"
                  android:layout_marginStart="10dp"
                  android:layout_weight="0.3"
                  android:textColor="@color/colorPrimary"
                  tools:ignore="SmallSp"/>
        <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="0.7"
                android:layout_gravity="center_horizontal"
                android:gravity="center_horizontal"
                android:orientation="horizontal">

            <ImageView
                    android:layout_width="15dp"
                    android:layout_height="15dp"
                    android:layout_gravity="center_vertical"
                    android:gravity="center_vertical"
                    android:src="@drawable/ic_dark_eye"
                    android:scaleType="fitXY"
                    android:background="@color/colorAccent"
                    android:layout_marginStart="3dp"
                    android:contentDescription="@string/app_name"/>

            <TextView
                    android:id="@+id/views"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_vertical"
                    android:gravity="center_vertical"
                    android:lines="1"
                    android:layout_marginStart="5dp"
                    android:textSize="10sp"
                    tools:ignore="SmallSp"/>
        </LinearLayout>
    </LinearLayout>

</RelativeLayout>
 </androidx.cardview.widget.CardView>

product_list_row.xml

  <RelativeLayout xmlns:ads="http://schemas.android.com/apk/res-auto"
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
<com.google.android.gms.ads.AdView

        android:id="@+id/adView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="10dp"
        android:background="@color/colorAccent"
        ads:adSize="BANNER"
        ads:adUnitId="@string/banner_ad_unit_id_TEST"/>
       </RelativeLayout>
 <androidx.cardview.widget.CardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/next"
    android:layout_width="match_parent"
    android:layout_height="205dp"
    android:layout_gravity="center"
    android:layout_marginStart="3dp"
    android:layout_marginTop="6dp"
    android:layout_marginEnd="4dp"
    android:layout_marginBottom="7dp"
    card_view:cardCornerRadius="4dp">
<RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
>
    <ImageView android:layout_width="match_parent"
               android:layout_height="150dp"
               android:scaleType="matrix"
               android:padding="4dp"
               android:contentDescription="@string/app_name"
               android:id="@+id/productImage"
    />

    <TextView android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="@string/title"
              android:textSize="14sp"
              android:id="@+id/title"
              android:textStyle="bold"
              android:textColor="@color/colorText2"
              android:padding="5dp"
              android:layout_marginStart="5dp"
              android:layout_below="@+id/productImage"
              android:lines="1"
              android:ellipsize="end"
    />
    <LinearLayout android:layout_width="match_parent"
                  android:layout_height="wrap_content"
                  android:layout_below="@+id/title"
                  android:weightSum="1"
    >
        <TextView android:layout_width="match_parent"
                  android:layout_height="wrap_content"
                  android:textSize="10sp"
                  android:textStyle="italic"
                  android:id="@+id/date"
                  android:layout_marginStart="10dp"
                  android:layout_weight="0.3"
                  android:textColor="@color/colorPrimary"
                  tools:ignore="SmallSp"/>
        <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="0.7"
                android:layout_gravity="center_horizontal"
                android:gravity="center_horizontal"
                android:orientation="horizontal">

            <ImageView
                    android:layout_width="15dp"
                    android:layout_height="15dp"
                    android:layout_gravity="center_vertical"
                    android:gravity="center_vertical"
                    android:src="@drawable/ic_dark_eye"
                    android:scaleType="fitXY"
                    android:background="@color/colorAccent"
                    android:layout_marginStart="3dp"
                    android:contentDescription="@string/app_name"/>

            <TextView
                    android:id="@+id/views"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_vertical"
                    android:gravity="center_vertical"
                    android:lines="1"
                    android:layout_marginStart="5dp"
                    android:textSize="10sp"
                    tools:ignore="SmallSp"/>
        </LinearLayout>
    </LinearLayout>

</RelativeLayout>
 </androidx.cardview.widget.CardView>


您可以根据位置在onBindViewHolder()中设置AdView的可见性

尝试在RecyclerView中的5或10个值后显示广告。 比如:


不要忘记更改getItemCount()方法。

您需要在recyclerview中使用多个视图类型以获取提示检查此答案iam使用多个视图保持器您可以查看在recyclerview中添加横幅广告的google示例代码:也可以。请说明您面临的确切问题,广告是否未出现在列表中?但它是一个LinearLayoutManager管理器。在适配器中,有方法getItemCount()返回,其中包含items_count+(items_count%5);