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我也实现AdListener和NativeAdsManager.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)
毕竟,我Fragment有RecyclerView变得非常"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.
提前致谢!
经过几个小时的头痛后,我解决了我的问题。我需要更改的构造函数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)
但它并没有完全解决我的问题(滚动时出现微滞后),但我希望它对某人仍然有用。