Я пытаюсь показать нативную рекламу на Facebook в CardStackView ,
, как вы видите, на экране ниже, когда я перетаскиваю мой CardStackView adsView становится скрытым.
Я пытаюсь показывать объявления, как Приложение Tinder показывает в их приложении.
Так как мне решить эту ошибку?в приведенном ниже коде мои адаптеры onBindViewHolder вызовы метода продолжаются, когда элемент перетаскивается, даже если элемент отброшен в исходное положение.
![enter image description here](https://i.stack.imgur.com/AR3lL.gif)
Вот код моего адаптера,
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);
}
}
}