Swipe-cards
Swipe-cards copied to clipboard
Google Ads and Facebook Ads not displaying in the cards
Hi,
I am trying to integrate Ads inside the cards, example every 5th card to show the ads. But the view is not rendering, any idea what might be going wrong.
I will post my Adapter code here. `public class MyCardAdapter extends BaseAdapter {
private Context mContext;
private LayoutInflater mInflater;
private List<UserModel> mList;
private final int ADS = 0;
private final int MYVIEW = 1;
public MyCardAdapter(Context context, List<UserModel> list) {
mInflater = LayoutInflater.from(context);
this.mList = list;
this.mContext = context;
}
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public int getItemViewType(int position) {
if (mList.get(position).isAds) {
return ADS;
} else {
return MYVIEW;
}
}
@Override
public int getCount() {
return mList.size();
}
@Override
public Object getItem(int position) {
return mList.get(position);
}
@Override
public long getItemId(int position) {
return mList.get(position).hashCode();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
int type = getItemViewType(position);
if (mList.get(position).isAds) {
convertView = mInflater.inflate(R.layout.swing_fling_fbads_item, parent, false);
final FbAdsViewHilder fbAdsViewHolder = new FbAdsViewHilder(convertView);
fbAdsViewHolder.nativeAd = new NativeAd(mContext, "130953020987022_138050996943891");
fbAdsViewHolder.nativeAd.setAdListener(new com.facebook.ads.AdListener() {
@Override
public void onError(Ad ad, AdError error) {
// Ad error callback
Log.e("", "");
}
@Override
public void onAdLoaded(Ad ad) {
fbAdsViewHolder.nativeAdContainer.addView(fbAdsViewHolder.adView);
// Create native UI using the ad metadata.
ImageView nativeAdIcon = (ImageView) fbAdsViewHolder.adView.findViewById(R.id.native_ad_icon);
TextView nativeAdTitle = (TextView) fbAdsViewHolder.adView.findViewById(R.id.native_ad_title);
MediaView nativeAdMedia = (MediaView) fbAdsViewHolder.adView.findViewById(R.id.native_ad_media);
TextView nativeAdSocialContext = (TextView) fbAdsViewHolder.adView.findViewById(R.id
.native_ad_social_context);
TextView nativeAdBody = (TextView) fbAdsViewHolder.adView.findViewById(R.id.native_ad_body);
Button nativeAdCallToAction = (Button) fbAdsViewHolder.adView.findViewById(R.id
.native_ad_call_to_action);
// Set the Text.
nativeAdTitle.setText(fbAdsViewHolder.nativeAd.getAdTitle());
nativeAdSocialContext.setText(fbAdsViewHolder.nativeAd.getAdSocialContext());
nativeAdBody.setText(fbAdsViewHolder.nativeAd.getAdBody());
nativeAdCallToAction.setText(fbAdsViewHolder.nativeAd.getAdCallToAction());
// Download and display the ad icon.
NativeAd.Image adIcon = fbAdsViewHolder.nativeAd.getAdIcon();
NativeAd.downloadAndDisplayImage(adIcon, nativeAdIcon);
// Download and display the cover image.
nativeAdMedia.setNativeAd(fbAdsViewHolder.nativeAd);
// Add the AdChoices icon
AdChoicesView adChoicesView = new AdChoicesView(mContext, fbAdsViewHolder.nativeAd, true);
fbAdsViewHolder.adChoicesContainer.addView(adChoicesView);
// Register the Title and CTA button to listen for clicks.
List<View> clickableViews = new ArrayList<>();
clickableViews.add(nativeAdTitle);
clickableViews.add(nativeAdCallToAction);
fbAdsViewHolder.nativeAd.registerViewForInteraction(fbAdsViewHolder.nativeAdContainer, clickableViews);
}
@Override
public void onAdClicked(Ad ad) {
// Ad clicked callback
Log.e("", "");
}
@Override
public void onLoggingImpression(Ad ad) {
// On logging impression callback
Log.e("", "");
}
});
// Request an ad
fbAdsViewHolder.nativeAd.loadAd();
return convertView;
} else {
// if (convertView == null) {
convertView = mInflater.inflate(R.layout.swipe_fling_item, parent, false);
ViewHolder holder = new ViewHolder(convertView);
/* convertView.setTag(holder);
}
ViewHolder holder = (ViewHolder) convertView.getTag();*/
UserModel user = ((UserModel) getItem(position));
holder.user = user;
holder.tvTitle.setText(user.title);
holder.tvDesc.setText(user.description);
return convertView;
}
}
static class ViewHolder implements View.OnClickListener {
CardLayout cardLayout;
CardImageView img;
TextView tvTitle, tvDesc;
UserModel user;
ViewHolder(View rootView) {
cardLayout = (CardLayout) rootView;
img = cardLayout.findViewById(R.id.iv_main);
tvTitle = cardLayout.findViewById(R.id.tv_title);
tvDesc = cardLayout.findViewById(R.id.tv_desc);
}
@Override
public String toString() {
return "[Card:" + tvTitle.getText() + "]";
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.ll_bottom_left:
CustomTabsIntent customTabsIntent = new CustomTabsIntent.Builder().build();
CustomTabActivityHelper.openCustomTab(
(AppCompatActivity) cardLayout.getContext(), customTabsIntent, Uri.parse(article.link), new WebviewFallback());
break;
}
}
}
static class FbAdsViewHilder {
private NativeAd nativeAd;
private LinearLayout nativeAdContainer;
private LinearLayout adView;
LinearLayout adChoicesContainer;
FbAdsViewHilder(View rootView) {
nativeAdContainer = (LinearLayout) rootView.findViewById(R.id.native_ad_container);
LayoutInflater inflater = LayoutInflater.from(rootView.getContext());
adView = (LinearLayout) inflater.inflate(R.layout.native_ad_layout,
nativeAdContainer, false);
adChoicesContainer = (LinearLayout) adView.findViewById(R.id
.ad_choices_container);
}
}
} `
no support getViewTypeCount
Oh ok, is there any way to achieve this?