Вставьте Admob в представление ресайклера, когда загружен собственный продвижение admob
В настоящее время я смог вставить admob между моими элементами представления ресайклера и смог загрузить рекламу и элемент представления ресайклера, но моя проблема в том, что представление ресайклера не показывает никаких элементов до тех пор, пока
admob
загружен.
Итак, как мне вставить или отобразить
admob
когда он загружен. Если
admob failed to load
предметы вторичной переработки также не отображаются.
Другими словами, я хочу показать элемент просмотра ресайклера, и когда admob загружен, он должен вставить промежуточный вид ресайклера (пункт меню).
Адаптер
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private static final int MENU_ITEM_VIEW_TYPE = 0;
private static final int UNIFIED_NATIVE_AD_VIEW_TYPE = 1;
private final Context mContext;
private final ArrayList<Object> videosFolderName;
public RecyclerViewAdapter(Context context, ArrayList<Object> videosFolderName) {
this.mContext = context;
this.videosFolderName = videosFolderName;
}
public class VideoAdapterViewHolder extends RecyclerView.ViewHolder{
public TextView folderName;
public RelativeLayout folderpath;
public VideoAdapterViewHolder(@NonNull View itemView) {
super(itemView);
folderName = (TextView)itemView.findViewById(R.id.folderName);
folderpath = (RelativeLayout)itemView.findViewById(R.id.cardFolder);
}
}
@Override
public int getItemCount() {
return videosFolderName.size();
}
@Override
public int getItemViewType(int position) {
Object recyclerViewItem = videosFolderName.get(position);
if (recyclerViewItem instanceof UnifiedNativeAd) {
return UNIFIED_NATIVE_AD_VIEW_TYPE;
}
return MENU_ITEM_VIEW_TYPE;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
switch (viewType) {
case UNIFIED_NATIVE_AD_VIEW_TYPE:
View unifiedNativeLayoutView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.small_ads, viewGroup, false);
return new UnifiedNativeAdViewHolder(unifiedNativeLayoutView);
case MENU_ITEM_VIEW_TYPE:
default:
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.folder_item, viewGroup, false);
return new VideoAdapterViewHolder(view);
}
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
int viewType = getItemViewType(position);
switch (viewType) {
case UNIFIED_NATIVE_AD_VIEW_TYPE:
UnifiedNativeAd nativeAd = (UnifiedNativeAd) videosFolderName.get(position);
populateNativeAdView(nativeAd, ((UnifiedNativeAdViewHolder) holder).getAdView());
break;
case MENU_ITEM_VIEW_TYPE:
default:
((VideoAdapterViewHolder) holder).folderName.setText("" + videosFolderName.get(position));
((VideoAdapterViewHolder) holder).folderpath.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
}
});
}
}
private void populateNativeAdView(UnifiedNativeAd nativeAd, UnifiedNativeAdView adView) {
((TextView) adView.getHeadlineView()).setText(nativeAd.getHeadline());
((TextView) adView.getBodyView()).setText(nativeAd.getBody());
((Button) adView.getCallToActionView()).setText(nativeAd.getCallToAction());
NativeAd.Image icon = nativeAd.getIcon();
if (nativeAd.getStarRating() == null) {
adView.getStarRatingView().setVisibility(View.INVISIBLE);
} else {
((RatingBar) adView.getStarRatingView()).setRating(nativeAd.getStarRating().floatValue());
adView.getStarRatingView().setVisibility(View.VISIBLE);
}
adView.setNativeAd(nativeAd);
}
}
Основное занятие
public class MainActivity extends AppCompatActivity {
private ArrayList<VideoViewInfo> AllVideosData = new ArrayList<>();
private ArrayList<Object> videosFolderName = new ArrayList<>();
private List<UnifiedNativeAd> mNativeAds = new ArrayList<>();
public static final int NUMBER_OF_ADS = 1;
private AdLoader adLoader;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
populateFolders();
loadNativeAds();
}
private void populateFolders() {
GetVideos gv = new GetVideos();
gv.getAllVideosData(this, AllVideosData);
for (int i = 0; i < AllVideosData.size(); i++) {
int j;
for (j = 0; j < videosFolderName.size(); j++) {
if (videosFolderName.get(j).equals(AllVideosData.get(i).getBucketName())) {
break;
}
}
if (j == videosFolderName.size()) {
videosFolderName.add(AllVideosData.get(i).getBucketName());
}
}
String[] bucketName = new String[videosFolderName.size()];
videosFolderName.toArray(bucketName);
}
private void loadNativeAds() {
AdLoader.Builder builder = new AdLoader.Builder(this, getString(R.string.native_ad_id));
adLoader = builder.forUnifiedNativeAd(new UnifiedNativeAd.OnUnifiedNativeAdLoadedListener() {
@Override
public void onUnifiedNativeAdLoaded(UnifiedNativeAd unifiedNativeAd) {
mNativeAds.add(unifiedNativeAd);
if (!adLoader.isLoading()) {
insertAdsInMenuItems();
}
}
}).withAdListener(new AdListener() {
@Override
public void onAdFailedToLoad(int errorCode) {
if (!adLoader.isLoading()) {
insertAdsInMenuItems();
}
}
}).build();
adLoader.loadAds(new AdRequest.Builder().build(), NUMBER_OF_ADS);
}
public ArrayList<Object> getRecyclerViewItems() {
return videosFolderName;
}
private void insertAdsInMenuItems() {
if (mNativeAds.size() <= 0) {
return;
}
int offset = (videosFolderName.size() / mNativeAds.size()) + 1;
///int offset = (12) + 1;
int index = 3;
for (UnifiedNativeAd ad : mNativeAds) {
videosFolderName.add(index, ad);
index = index + offset;
}
loadMenu();
}
private void loadMenu() {
RecyclerView recyclerView = findViewById(R.id.folderRecyclerView);
GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 3);
recyclerView.setLayoutManager(new GridLayoutManager(this, 3));
RecyclerView.Adapter adapter = new RecyclerViewAdapter(this, videosFolderName);
recyclerView.setAdapter(adapter);
}
}
UnifiedNativeAdViewHolder
public class UnifiedNativeAdViewHolder extends RecyclerView.ViewHolder {
private UnifiedNativeAdView adView;
public UnifiedNativeAdView getAdView() {
return adView;
}
UnifiedNativeAdViewHolder(View view) {
super(view);
adView = (UnifiedNativeAdView) view.findViewById(R.id.ad_view);
// The MediaView will display a video asset if one is present in the ad, and the
// first image asset otherwise.
adView.setMediaView((MediaView) adView.findViewById(R.id.ad_media));
// Register the view used for each individual asset.
adView.setHeadlineView(adView.findViewById(R.id.ad_headline));
adView.setBodyView(adView.findViewById(R.id.ad_body));
adView.setCallToActionView(adView.findViewById(R.id.ad_call_to_action));
adView.setIconView(adView.findViewById(R.id.ad_icon));
adView.setStarRatingView(adView.findViewById(R.id.ad_stars));
}
}