Собственные рекламные баннеры Facebook с дублирующим макетом в ListView - PullRequest
0 голосов
/ 08 июля 2019

Я использую баннерную рекламу Facebook Native в моем ListView.Объявления работают нормально, но над объявлениями также отображается пустой макет.

Ниже приведен код моего ListView адаптера:

public CouponsViewAdapter(Context context, List<DataSetForCoupons> 
couponsdata, String amount_value, String id, String value, 
List<DataSetForAddCoupons> addcouponsdata, boolean saving) {
    this.context = context;
    this.DataList = couponsdata;
    this.DataListAdd = addcouponsdata;
    this.amount = amount_value;
    this.id = id;
    this.value = value;
    this.saving = saving;
    for (int i = 0; i < DataList.size(); i++) {
        if (i % 2 == 0 && i != 0) {
            itemType.add(i, 1);
            DataList.add(i, null);
        } else
            itemType.add(i, 0);
    }
}

@Override
public int getCount() {
    return DataList.size();
}

@Override
public Object getItem(int position) {
    return position;
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public int getItemViewType(int position) {
    if (itemType.get(position) == 1)
        return SECOND_ITEM;
    else
        return FIRST_ITEM;
}

@Override
public int getViewTypeCount() {
    return 2;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    int type = getItemViewType(position);

    if (convertView == null) {
    final LayoutInflater Inflater = (LayoutInflater) context.getSystemService(
                Activity.LAYOUT_INFLATER_SERVICE);

    switch (type) {
    case SECOND_ITEM:             
    nativeBannerAd = new NativeBannerAd(context, "IMG_16_9_APP_INSTALL#635165165156968704093");

    convertView = Inflater.inflate(R.layout.banner_ad, null, false);
    nativeBannerAdContainer = convertView.findViewById(R.id.banner_ad_layout);

    nativeBannerAd.setAdListener(new NativeAdListener() {
        @Override
        public void onAdLoaded(Ad ad) {
            if (nativeBannerAd == null || nativeBannerAd != ad) {
                return;
            }
            nativeBannerAd.unregisterView();

            adView = (LinearLayout) Inflater.inflate(R.layout.banner_ad, 
            nativeBannerAdContainer, false);
            nativeBannerAdContainer.addView(adView);

            RelativeLayout adChoicesContainer = adView.findViewById(R.id.ad_choices_container);
            AdChoicesView adChoicesView = new AdChoicesView(context, nativeBannerAd, true);
            adChoicesContainer.addView(adChoicesView, 0);

            AdIconView nativeAdIconView = adView.findViewById(R.id.native_icon_view);
            Button nativeAdCallToAction = adView.findViewById(R.id.native_ad_call_to_action);

            List<View> clickableViews = new ArrayList<>();
            clickableViews.add(nativeAdTitle);
            clickableViews.add(nativeAdCallToAction);
            nativeBannerAd.registerViewForInteraction(adView, nativeAdIconView, clickableViews);
        }
        @Override
        public void onAdClicked(Ad ad) {
        }
        @Override
        public void onLoggingImpression(Ad ad) {
        }
    });
    nativeBannerAd.loadAd();
    break;
    case FIRST_ITEM:
        //Implementing the ListView here
    break;  
    return convertView;
}

Я пытался использоватьconvertView вместо adView, но выдает ошибки во время выполнения.

Вот скриншот

1 Ответ

1 голос
/ 08 июля 2019

Перед добавлением новых представлений Необходимо удалить ранее добавленные представления из существующего представления, также это не может вызвать дублирование представления nativeBannerAdContainer.removeAllViews (); // Добавить эту строку кода перед добавлением новых представлений nativeBannerAdContainer.addView (AdView);//

Если вы удалите removeAllViews, которое удалит ранее добавленные все представления и ваше представление никогда не будет дублироваться

 nativeBannerAd.setAdListener(new NativeAdListener() {
        @Override
        public void onAdLoaded(Ad ad) {
            if (nativeBannerAd == null || nativeBannerAd != ad) {
                return;
            }
            nativeBannerAd.unregisterView();

            adView = (LinearLayout) Inflater.inflate(R.layout.banner_ad, 
            nativeBannerAdContainer, false);
            nativeBannerAdContainer.removeAllViews();
            nativeBannerAdContainer.addView(adView);

            RelativeLayout adChoicesContainer = adView.findViewById(R.id.ad_choices_container);
            AdChoicesView adChoicesView = new AdChoicesView(context, nativeBannerAd, true);
            adChoicesContainer.addView(adChoicesView, 0);

            AdIconView nativeAdIconView = adView.findViewById(R.id.native_icon_view);
            Button nativeAdCallToAction = adView.findViewById(R.id.native_ad_call_to_action);

            List<View> clickableViews = new ArrayList<>();
            clickableViews.add(nativeAdTitle);
            clickableViews.add(nativeAdCallToAction);
            nativeBannerAd.registerViewForInteraction(adView, nativeAdIconView, clickableViews);
        }
        @Override
        public void onAdClicked(Ad ad) {
        }
        @Override
        public void onLoggingImpression(Ad ad) {
        }
    });
...