我正在尝试在回收者视图中实施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);
}
}
}
请让我知道我做错了什么。任何帮助将不胜感激。
谢谢