zhuchen1109 / Swipe-cards

类似探探和tinder,可以左右滑动的层叠卡片

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Google Ads and Facebook Ads not displaying in the cards

SkyTreasure opened this issue · comments

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?