Java 如何使用recyclerview实现advance原生广告?
一、 已经在android中实现了recyclerview。现在我正在尝试在android中实现Advance原生广告。为此,我遵循了谷歌代码实验室教程。但我没有成功。下面是我的recyclerview代码。然后是我试图在我的recyclerview中实现AdvanceNative广告的代码 Recyclerview适配器:Java 如何使用recyclerview实现advance原生广告?,java,android,android-recyclerview,Java,Android,Android Recyclerview,一、 已经在android中实现了recyclerview。现在我正在尝试在android中实现Advance原生广告。为此,我遵循了谷歌代码实验室教程。但我没有成功。下面是我的recyclerview代码。然后是我试图在我的recyclerview中实现AdvanceNative广告的代码 Recyclerview适配器: public class CouponDealsAdapter extends RecyclerView.Adapter<CouponDealsAdapter.Vie
public class CouponDealsAdapter extends RecyclerView.Adapter<CouponDealsAdapter.ViewHolder> {
public List<CouponDeal> couponDeals;
public Context context;
public CouponDealsAdapter(Context context, List<CouponDeal> couponDeals) {
this.couponDeals = couponDeals;
this.context = context;
}
public class ViewHolder extends RecyclerView.ViewHolder {
public TextView store_name;
View mView;
public ViewHolder(View itemView) {
super(itemView);
mView = itemView;
store_name = (TextView) mView.findViewById(R.id.couponDeals_storeName);
}
}
@Override
public int getItemCount() {
return couponDeals.size();
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.coupons_deal, parent, false);
final ViewHolder viewHolder = new ViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
if (TextUtils.isEmpty(couponDeals.get(position).getStore_name())) {
holder.store_name.setText("Not Available");
} else {
holder.store_name.setText(couponDeals.get(position).getStore_name());
}
}
}
根据codelab的教程,带有Add实现的Recyclerview适配器
public class CouponDealsAdapter extends RecyclerView.Adapter<CouponDealsAdapter.ViewHolder> {
private static final int MENU_ITEM_VIEW_TYPE = 0;
private static final int UNIFIED_NATIVE_AD_VIEW_TYPE = 1;
public List<CouponDeal> couponDeals;
public Context context;
public CouponDealsAdapter(Context context, List<CouponDeal> couponDeals) {
this.couponDeals = couponDeals;
this.context = context;
}
public class ViewHolder extends RecyclerView.ViewHolder {
public TextView store_name;
View mView;
public ViewHolder(View itemView) {
super(itemView);
mView = itemView;
store_name = (TextView) mView.findViewById(R.id.couponDeals_storeName);
}
}
@Override
public int getItemCount() {
return couponDeals.size();
}
@Override
public int getItemViewType(int position) {
Object recyclerViewItem = couponDeals.get(position);
if (recyclerViewItem instanceof UnifiedNativeAd) {
return UNIFIED_NATIVE_AD_VIEW_TYPE;
}
return MENU_ITEM_VIEW_TYPE;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
switch (viewType) {
case UNIFIED_NATIVE_AD_VIEW_TYPE:
View unifiedNativeLayoutView = LayoutInflater.from(
parent.getContext()).inflate(R.layout.ad_unified,
parent, false);
return new UnifiedNativeAdViewHolder(unifiedNativeLayoutView);
case MENU_ITEM_VIEW_TYPE:
default:
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.coupons_deal, parent, false);
return new ViewHolder(view);
}
}
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
int viewType = getItemViewType(position);
switch (viewType) {
case UNIFIED_NATIVE_AD_VIEW_TYPE:
UnifiedNativeAd nativeAd = (UnifiedNativeAd) couponDeals.get(position);
populateNativeAdView(nativeAd, ((UnifiedNativeAdViewHolder) holder).getAdView());
break;
case MENU_ITEM_VIEW_TYPE:
// fall through
default:
if (TextUtils.isEmpty(couponDeals.get(position).getStore_name())) {
holder.store_name.setText("Not Available");
} else {
holder.store_name.setText(couponDeals.get(position).getStore_name());
}
}
}
private void populateNativeAdView(UnifiedNativeAd nativeAd,
UnifiedNativeAdView adView) {
// Some assets are guaranteed to be in every UnifiedNativeAd.
((TextView) adView.getHeadlineView()).setText(nativeAd.getHeadline());
((TextView) adView.getBodyView()).setText(nativeAd.getBody());
((Button) adView.getCallToActionView()).setText(nativeAd.getCallToAction());
// These assets aren't guaranteed to be in every UnifiedNativeAd, so it's important to
// check before trying to display them.
NativeAd.Image icon = nativeAd.getIcon();
if (icon == null) {
adView.getIconView().setVisibility(View.INVISIBLE);
} else {
((ImageView) adView.getIconView()).setImageDrawable(icon.getDrawable());
adView.getIconView().setVisibility(View.VISIBLE);
}
if (nativeAd.getPrice() == null) {
adView.getPriceView().setVisibility(View.INVISIBLE);
} else {
adView.getPriceView().setVisibility(View.VISIBLE);
((TextView) adView.getPriceView()).setText(nativeAd.getPrice());
}
if (nativeAd.getStore() == null) {
adView.getStoreView().setVisibility(View.INVISIBLE);
} else {
adView.getStoreView().setVisibility(View.VISIBLE);
((TextView) adView.getStoreView()).setText(nativeAd.getStore());
}
if (nativeAd.getStarRating() == null) {
adView.getStarRatingView().setVisibility(View.INVISIBLE);
} else {
((RatingBar) adView.getStarRatingView())
.setRating(nativeAd.getStarRating().floatValue());
adView.getStarRatingView().setVisibility(View.VISIBLE);
}
if (nativeAd.getAdvertiser() == null) {
adView.getAdvertiserView().setVisibility(View.INVISIBLE);
} else {
((TextView) adView.getAdvertiserView()).setText(nativeAd.getAdvertiser());
adView.getAdvertiserView().setVisibility(View.VISIBLE);
}
// Assign native ad object to the native view.
adView.setNativeAd(nativeAd);
}
}
在这段代码中,这一行出现了错误。
返回新的UnifiedNativeLeadViewHolder(unifiedNativeLayoutView)
错误是:不兼容的类型:
必需:com.release.adapter.RecycleServiceAdapter.ViewHolder
找到:com.release.adapter.UnifiedNativeReadViewHolder
另一个错误:
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
int viewType = getItemViewType(position);
switch (viewType) {
case UNIFIED_NATIVE_AD_VIEW_TYPE:
UnifiedNativeAd nativeAd = (UnifiedNativeAd) couponDeals.get(position);
populateNativeAdView(nativeAd, ((UnifiedNativeAdViewHolder) holder).getAdView());
break;
我在这行中出错了。UnifiedNativeAd nativeAd=(UnifiedNativeAd)耦合项.get(位置)
错误:不兼容的类型:RecycleServiceAdapter.ViewHolder无法转换为UnifiedNativeReadViewHolder
请帮我纠正这些错误。这是正确的实施方式。或者请告诉我如何编写代码来实现advance native ad
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
switch (viewType) {
case UNIFIED_NATIVE_AD_VIEW_TYPE:
View unifiedNativeLayoutView = LayoutInflater.from(
parent.getContext()).inflate(R.layout.ad_unified,
parent, false);
return new UnifiedNativeAdViewHolder(unifiedNativeLayoutView);
case MENU_ITEM_VIEW_TYPE:
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
int viewType = getItemViewType(position);
switch (viewType) {
case UNIFIED_NATIVE_AD_VIEW_TYPE:
UnifiedNativeAd nativeAd = (UnifiedNativeAd) couponDeals.get(position);
populateNativeAdView(nativeAd, ((UnifiedNativeAdViewHolder) holder).getAdView());
break;