Я реализовал утилиту просмотра в android. сейчас я пытаюсь внедрить Advance Native Ad в android. для этого я следовал учебнику Google Codelabs. Ссылка на учебник . Но я не добился успеха. Ниже мой код повторного просмотра. и после этого код, который я пытался внедрить Advance Native Ad в моем обзоре переработчика.
Адаптер Recyclerview:
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());
}
}
}
UnifiedNativeAdViewHolder:
publi c класс UnifiedNativeAdViewHolder extends RecyclerView.ViewHolder {
private UnifiedNativeAdView adView;
public UnifiedNativeAdView getAdView() {
return adView;
}
UnifiedNativeAdViewHolder(View view) {
super(view);
adView = (UnifiedNativeAdView) view.findViewById(R.id.ad_view);
// The MediaView will display a video asset if one is present in the ad, and the
// first image asset otherwise.
adView.setMediaView((MediaView) adView.findViewById(R.id.ad_media));
// Register the view used for each individual asset.
adView.setHeadlineView(adView.findViewById(R.id.ad_headline));
adView.setBodyView(adView.findViewById(R.id.ad_body));
adView.setCallToActionView(adView.findViewById(R.id.ad_call_to_action));
adView.setIconView(adView.findViewById(R.id.ad_icon));
adView.setPriceView(adView.findViewById(R.id.ad_price));
adView.setStarRatingView(adView.findViewById(R.id.ad_stars));
adView.setStoreView(adView.findViewById(R.id.ad_store));
adView.setAdvertiserView(adView.findViewById(R.id.ad_advertiser));
}
Адаптер Recyclerview с реализацией Add согласно учебному пособию codelab.
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);
}
}
Я не знаю, является ли это правильным способом его реализации или нет , Я просто следую учебнику по Codelabs. Я также получаю некоторые ошибки. Упоминается ниже ..
@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:
В этом фрагменте кода я получаю сообщение об ошибке в этой строке. вернуть новый UnifiedNativeAdViewHolder (unifiedNativeLayoutView);
Ошибка: Несовместимые типы:
Обязательно: com.release.adapter.RecyclerViewAdapter.ViewHolder
Найдено: com.release.adapter. UnifiedNativeAdViewHolder
Другая ошибка:
@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) couponDeals.get (position);
ошибка: несовместимые типы: RecyclerViewAdapter.ViewHolder не может быть преобразован в UnifiedNativeAdViewHolder
Пожалуйста, помогите мне с этими ошибками. и это правильный способ реализации. Или, пожалуйста, скажите написать код для реализации предварительной нативной рекламы.