在RycyclerView android中的Facebook原生广告

Pet*_*ker 5 java android facebook-audience-network recycler-adapter android-recyclerview

在Recycler视图android中发现了类似问题的Facebook原生广告,但在与自定义广告的集成方面遇到了一些问题.

对于我试图描述的第一个NativeAdsManager:

  @Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    manager = new NativeAdsManager(getActivity(),    "892769720837476_892772047503910", 5);
    manager.setListener(this);
    manager.loadAds();

    nativeAd = new NativeAd(getActivity(), "892769720837476_892772047503910");
    nativeAd.setAdListener(this);
    nativeAd.loadAd();
...
 }
Run Code Online (Sandbox Code Playgroud)

然后我Native ad作为参数包含在RecyclerAdapter构造函数中:

  adapter = new RecyclerAdapter(foodDataList, getActivity(), nativeAd);
Run Code Online (Sandbox Code Playgroud)

在这个Class我也实现AdListenerNativeAdsManager.Listener方法:

@Override
public void onError(Ad ad, AdError adError) {

}

@Override
public void onAdLoaded(Ad ad) {
}

@Override
public void onAdClicked(Ad ad) {

}

@Override
public void onAdsLoaded() {

    System.out.println("Loaded in fragment");
    nativeAd = manager.nextNativeAd();
    nativeAd.setAdListener(this);

    adapter.notifyDataSetChanged();


}

@Override
public void onAdError(AdError adError) {

}
Run Code Online (Sandbox Code Playgroud)

之后,在RecyclerAdapter 类:

   public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) {
    switch (holder.getItemViewType()) {
    ...
    case 2:
            AdditionalHolder new_holder = (AdditionalHolder) holder;
            adView = NativeAdView.render(context, nativeAd, NativeAdView.Type.HEIGHT_100);
            new_holder.templateContainer.addView(adView);
            return;

   ...
    public class AdditionalHolder extends RecyclerView.ViewHolder {
    protected LinearLayout templateContainer;

    public AdditionalHolder(View view) {
        super(view);

        templateContainer = (LinearLayout) view.findViewById(R.id.ad_test2);



    }
}
Run Code Online (Sandbox Code Playgroud)

毕竟,我FragmentRecyclerView变得非常"luggy"每次我可以看到越来越多的广告项目的时间(1 -经过10项,3 - -未来10等后,从一开始,2).

这是我第一次使用多个RecyclerView holders,并且发现这个问题很困难.

为您提供2的要点 Classes

https://gist.github.com/burnix/6af8196ee8acf5c8f94e - RecyclerAdapter.class https://gist.github.com/burnix/53dc2ed7446969b78f07 -FragmentList.class

请帮我解决表耳问题并按需要放置AudienceNetwork.

提前致谢!

Pet*_*ker 2

经过几个小时的头痛后,我解决了我的问题。我需要更改的构造函数RecyclerView

  public RecyclerAdapter(List<FoodData> food, Context context, NativeAd  nativeAd, NativeAdsManager manager) {
    this.foodDataList = food;
    this.context = context;
    this.nativeAd = nativeAd;
    this.manager = manager;
}
Run Code Online (Sandbox Code Playgroud)

并在以下位置实现原生广告的行为onBindViewHolder

  AdditionalHolder new_holder = (AdditionalHolder) holder;
            try {
                new_holder.templateContainer.removeViewInLayout(adView);
            } catch (Exception e) {
                e.printStackTrace();
            }
            nativeAd = manager.nextNativeAd();
            try {
                adView = NativeAdView.render(context, nativeAd, NativeAdView.Type.HEIGHT_300);
            } catch (NullPointerException e) {
                e.printStackTrace();
            }

            new_holder.templateContainer.addView(adView);
            new_holder.blank_holder.setVisibility(View.GONE);
Run Code Online (Sandbox Code Playgroud)

但它并没有完全解决我的问题(滚动时出现微滞后),但我希望它对某人仍然有用。