Как разместить нативную рекламу в Facebook в CardStackView (нативная реклама скрывается при перетаскивании рекламы)? - PullRequest
0 голосов
/ 11 марта 2019

Я пытаюсь показать нативную рекламу на Facebook в CardStackView ,

, как вы видите, на экране ниже, когда я перетаскиваю мой CardStackView adsView становится скрытым.

Я пытаюсь показывать объявления, как Приложение Tinder показывает в их приложении.

Так как мне решить эту ошибку?в приведенном ниже коде мои адаптеры onBindViewHolder вызовы метода продолжаются, когда элемент перетаскивается, даже если элемент отброшен в исходное положение.

enter image description here

Вот код моего адаптера,

public class ContentAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

    private List<Post> sList;
    private Context context;
    private List<NativeAd> mAdItems;
    private NativeAdsManager mNativeAdsManager;
    private static final int AD_DISPLAY_FREQUENCY = 5;
    private static final int POST_TYPE = 0;
    private static final int AD_TYPE = 1;
    private Post sModel;

    public ContentAdapter(List<Post> sList, NativeAdsManager nativeAdsManager, Context context) {
        this.sList = sList;
        this.context = context;
        mNativeAdsManager = nativeAdsManager;
        mAdItems = new ArrayList<>();
    }

    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

        if (viewType == AD_TYPE) {
            View inflatedView = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_native_ads, parent, false);
            return new AdHolder(inflatedView);
        } else {
            View inflatedView = LayoutInflater.from(parent.getContext()).inflate(R.layout
                    .row_content, parent, false);
            return new ContentHolder(inflatedView);
        }

       /* View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_spot, viewGroup, false);
        return new ContentHolder(view);*/
    }

    @Override
    public int getItemViewType(int position) {
        return (position + 1) % AD_DISPLAY_FREQUENCY == 0 ? AD_TYPE : POST_TYPE;
    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
        Log.d("kkkk","onBind");
        if (holder.getItemViewType() == AD_TYPE) {
            NativeAd ad;

            if (mAdItems.size() > (holder.getAdapterPosition() + 1) / AD_DISPLAY_FREQUENCY) {
                ad = mAdItems.get((holder.getAdapterPosition()) / AD_DISPLAY_FREQUENCY);
            } else {
                ad = mNativeAdsManager.nextNativeAd();
                mAdItems.add(ad);
            }

            AdHolder adHolder = (AdHolder) holder;
            //adHolder.adChoicesContainer.removeAllViews();

            if (ad != null) {

                adHolder.tvAdTitle.setText(ad.getAdvertiserName());
                adHolder.tvAdBody.setText(ad.getAdBodyText());
                adHolder.tvAdSocialContext.setText(ad.getAdSocialContext());
                adHolder.tvAdSponsoredLabel.setText(ad.getSponsoredTranslation());
                adHolder.btnAdCallToAction.setText(ad.getAdCallToAction());
                adHolder.btnAdCallToAction.setVisibility(
                        ad.hasCallToAction() ? View.VISIBLE : View.INVISIBLE);
                //AdChoicesView adChoicesView = new AdChoicesView(context, ad, true);
                //adHolder.adChoicesContainer.addView(adChoicesView, 0);

                List<View> clickableViews = new ArrayList<>();
                clickableViews.add(adHolder.ivAdIcon);
                clickableViews.add(adHolder.mvAdMedia);
                clickableViews.add(adHolder.btnAdCallToAction);
                ad.registerViewForInteraction(
                        adHolder.itemView,
                        adHolder.mvAdMedia,
                        adHolder.ivAdIcon,
                        clickableViews);
            }
        } else {

            /*Shayri sModel = sList.get(i);

             *//*Glide.with(myHolder.img)
                .load(sModel.getUrl())
                .into(myHolder.img);*//*

        myHolder.name.setText(sModel.getContent());
        myHolder.city.setText(sModel.getCategory());*/

            ContentHolder contentHolder = (ContentHolder) holder;

            //Calculate where the next postItem index is by subtracting ads we've shown.
            int index = holder.getAdapterPosition() - ((holder.getAdapterPosition()) / AD_DISPLAY_FREQUENCY);

            sModel = sList.get(index);
            contentHolder.name.setText(sModel.getContent());
        }

    }


    @Override
    public int getItemCount() {
        return sList.size() + mAdItems.size() - 1;
    }


    class ContentHolder extends RecyclerView.ViewHolder {

        TextView name, city;
        ImageView img;

        ContentHolder(@NonNull View itemView) {
            super(itemView);

            name = itemView.findViewById(R.id.tvContent);
            city = itemView.findViewById(R.id.tvCategory);
            img = itemView.findViewById(R.id.item_image);
        }
    }

    class AdHolder extends RecyclerView.ViewHolder {
        MediaView mvAdMedia;
        ImageView ivAdIcon;
        TextView tvAdTitle;
        TextView tvAdBody;
        TextView tvAdSocialContext;
        TextView tvAdSponsoredLabel;
        Button btnAdCallToAction;
        //LinearLayout adChoicesContainer;

        AdHolder(View view) {
            super(view);

            mvAdMedia = (MediaView) view.findViewById(R.id.native_ad_media);
            tvAdTitle = (TextView) view.findViewById(R.id.native_ad_title);
            tvAdBody = (TextView) view.findViewById(R.id.native_ad_body);
            tvAdSocialContext = (TextView) view.findViewById(R.id.native_ad_social_context);
            tvAdSponsoredLabel = (TextView) view.findViewById(R.id.native_ad_sponsored_label);
            btnAdCallToAction = (Button) view.findViewById(R.id.native_ad_call_to_action);
            ivAdIcon = view.findViewById(R.id.native_ad_icon);
            //adChoicesContainer = (LinearLayout) view.findViewById(R.id.ad_choices_container);

        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...