如何在Android Recycler视图中添加广告暴民原生广告

时间:2019-08-04 13:42:38

标签: android admob

我正在尝试在回收者视图中实施ad mobs原生广告,但是即使我在xml文件中设置了广告单元ID和广告尺寸,也遇到了错误:

  

java.lang.IllegalStateException:必须在调用loadAd之前设置广告尺寸和广告单元ID。

下面是我的代码:

fragment_home.xml

<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:context=".Home"
android:orientation="vertical"
android:id="@+id/linearHome"
android:paddingBottom="16dp"
android:layout_marginBottom="50dp">

<androidx.recyclerview.widget.RecyclerView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="10dp"
                android:paddingLeft="12dp"
                android:paddingRight="12dp"
                android:id="@+id/recycle"/>

</RelativeLayout>

adview_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:ads="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">

<androidx.cardview.widget.CardView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:cardUseCompatPadding="true"
    app:cardCornerRadius="3dp"
    app:contentPadding="3dp">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

    <com.google.android.gms.ads.NativeExpressAdView
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:id="@+id/mAdView"
        android:layout_centerHorizontal="true"
        ads:adUnitId="@string/ad_unit_id"
        ads:adSize="320*300">

    </com.google.android.gms.ads.NativeExpressAdView>

    </RelativeLayout>

</androidx.cardview.widget.CardView>

</LinearLayout>

HomeBookAdapter.java

public class HomeBookAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{

private static final int LAYOUT_ADS= 0;
private static final int LAYOUT_BOOKS= 1;

private ArrayList<LoadHomeBooks> list;
private Context context;

VideoController mVideoController;

public HomeBookAdapter(ArrayList<LoadHomeBooks> list,Context context){

    this.list = list;
    this.context = context;
}

@Override
public int getItemViewType(int position) {

    if(position % 2 == 0){

        return LAYOUT_ADS;
    }else{

        return LAYOUT_BOOKS;
    }

}

@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

    View view =null;
    RecyclerView.ViewHolder viewHolder = null;

    if(viewType==LAYOUT_ADS)
    {
        view = LayoutInflater.from(parent.getContext()).inflate(R.layout.adview_layout,parent,false);
        viewHolder = new AdViewHolder(view);
    }
    else
    {
        view = LayoutInflater.from(parent.getContext()).inflate(R.layout.home_book_row,parent,false);
        viewHolder= new BookViewHolder(view);
    }

    return viewHolder;

}

@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {

    if(holder.getItemViewType() == LAYOUT_ADS){

        AdViewHolder adHolder = (AdViewHolder)holder;

        adHolder.mAdView.setAdUnitId("ca-app-pub-1218708258118994/33293434344");

        adHolder.mAdView.setVideoOptions(new VideoOptions.Builder().setStartMuted(true).build());

        mVideoController = adHolder.mAdView.getVideoController();

        mVideoController.setVideoLifecycleCallbacks(new VideoController.VideoLifecycleCallbacks() {
            @Override
            public void onVideoEnd() {
                super.onVideoEnd();
            }
        });

        adHolder.mAdView.setAdListener(new AdListener(){

            @Override
            public void onAdLoaded() {
                if(mVideoController.hasVideoContent()){

                }else{

                }
            }
        });

        adHolder.mAdView.loadAd(new AdRequest.Builder().build());

    }else{

        BookViewHolder bookHolder = (BookViewHolder)holder;

        LoadHomeBooks model = list.get(position);

        final String bookId = model.getbUid();
        final String bookName = model.getbName();
        final String bookImage = model.getbImage();
        final String bookSub = model.getbSub();
        final String bookClass = model.getbClass();

        RequestOptions requestOptions = new RequestOptions();
        requestOptions.placeholder(R.drawable.openbook);

        Glide.with(context).load(model.getbImage()).apply(requestOptions).into(bookHolder.homeBookImage);

        bookHolder.homeBookName.setText(model.getbName());
        bookHolder.homeSubject.setText(model.getbSub());
        bookHolder.homeClass.setText(model.getbClass());

    }
}

@Override
public int getItemCount() {
    return list.size();
}

public class AdViewHolder extends RecyclerView.ViewHolder {

    NativeExpressAdView mAdView;

    public AdViewHolder(@NonNull View itemView) {
        super(itemView);

        mAdView = itemView.findViewById(R.id.mAdView);
    }
}

public class BookViewHolder extends RecyclerView.ViewHolder {

    TextView homeBookName,homeSubject,homeClass;
    ImageView homeBookImage;

    public BookViewHolder(@NonNull View itemView) {
        super(itemView);

        homeBookName = itemView.findViewById(R.id.homeBookName);
        homeSubject = itemView.findViewById(R.id.homeSubject);
        homeClass = itemView.findViewById(R.id.homeClass);
        homeBookImage = itemView.findViewById(R.id.homeBookImage);

      }
   }
}

请让我知道我做错了什么。任何帮助将不胜感激。

谢谢

0 个答案:

没有答案