我有RecyclerView
,其中每 14 个项目是一个 Facebook Audience Network Ad
。
@Override
public int getItemViewType(int position) {
int viewType = 0;
if (position % 14 == 0 && position != 0) viewType = 2;
return viewType;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
switch (viewType) {
case 0:
return new MainViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_item, parent, false));
case 2:
return new AdHolder((LayoutInflater.from(parent.getContext()).inflate(R.layout.ad_test3, parent, false)));
}
return null;
}
如下:每 14 个元素都是相同的。这里的onBindViewHolder
方法。
@Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) {
final FoodData foodData = foodDataList.get(position);
switch (holder.getItemViewType()) {
case 0:
MainViewHolder mainViewHolder = (MainViewHolder) holder;
...
break;
case 2:
AdHolder adHolder = (AdHolder) holder;
//System.out.println("ad hasH" + position);
if (manager.isLoaded()) {
NativeAd nativeAd;
if (map.containsKey(position)) {
nativeAd = map.get(position);
} else {
nativeAd = manager.nextNativeAd();
map.put(position, nativeAd);
}
System.out.println(" Native Ad" + nativeAd.hashCode());
System.out.println(" Native Ad.Title" + nativeAd.getAdTitle());
adHolder.templateContainer.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, Config.AD_HEIGHT_DP));
adHolder.nativeAdSocialContext.setText(nativeAd.getAdSocialContext());
adHolder.nativeAdCallToAction.setText(nativeAd.getAdCallToAction());
adHolder.nativeAdTitle.setText(nativeAd.getAdTitle());
adHolder.nativeAdBody.setText(nativeAd.getAdBody());
Picasso.with(context)
.load(nativeAd.getAdIcon().getUrl())
.tag("resume_tag")
.into(adHolder.nativeAdIcon);
Picasso.with(context)
.load(nativeAd.getAdCoverImage().getUrl())
.resize(width, ad_height)
.tag("resume_tag")
.placeholder(R.drawable.adholder2)
.into(adHolder.nativeAdMedia);
System.out.println("url =" + nativeAd.getAdCoverImage().getUrl());
if (adHolder.adChoicesView == null) {
adHolder.adChoicesView = new AdChoicesView(context, nativeAd, true);
adHolder.adChoiceContainer.addView(adHolder.adChoicesView, 0);
}
nativeAd.registerViewForInteraction(holder.itemView);
} else {
adHolder.params = adHolder.templateContainer.getLayoutParams();
adHolder.templateContainer.setLayoutParams(new ViewGroup.LayoutParams(0, 0));
}
break;
}
}
我无法理解的是,当我检查相同的 NativeAd 的位置时object
:
System.out.println(" Native Ad" + nativeAd.hashCode());
System.out.println(" Native Ad.Title" + nativeAd.getAdTitle());
我发现, hashCode
NativeAd 的变化,但title
(和其他元素)没有!
希望有人我们会帮助我。这是https://gist.github.com/burnix/c1dd34dd896f5c6ddc6b2b8971908e28的完整代码Adapter