0

私はRecyclerViewです.14番目の商品はすべてFacebook Audience Network Adです。Androidオーディエンスネットワーク広告が次の広告を表示しない

@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メソッドがあります。 NativeAdの変化が、title(および他の要素)のhashCodeが」doesnのことを私は見つける

System.out.println(" Native Ad" + nativeAd.hashCode()); 
System.out.println(" Native Ad.Title" + nativeAd.getAdTitle()); 

、:

@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確認したときに私が理解できないことですt!

誰かが私を助けてくれることを願っています。 Adapterhttps://gist.github.com/burnix/c1dd34dd896f5c6ddc6b2b8971908e28

答えて

1

この問題を確認するためのサンプルプロジェクトを投稿するとよいでしょう。アダプターコードのベースのみでは不十分です。

コードから、簡単な答えは、広告マネージャが正しく読み込まれていないことです。

長い回答は、広告マネージャがmanager.laodAds()で呼び出され、広告が完全にまたは部分的に塗りつぶされ、manager.isLoaded()で十分でないことを確認するときです。すべての広告が正しく読み込まれるようにNativeAdsManager.Listener::onAdsLoaded()を設定することをお勧めします。アダプタからアクティビティへmanagerを移動することもお勧めします。

注目点は、それぞれnativeAdのみです。registerViewForInteraction(View)に一度登録してください。これは正しくありません。 viewHolderは毎回異なるため、nativeAdを正しく動作させるには、ビューの登録を解除してから、正しいビューのために再び登録する必要があります。

もう1つ注目すべき点は、マネージャーが最初から3つのネイティブ広告を要求しただけで、アダプタ内のコードが有効な番号を確認せずにmanager.nextNativeAd()を呼び出していることです。これにより、プレースメントが3以上の場合、3つの広告内で連続的なループが発生します。これは、収益配分の基礎となる最良の方法ではありません。

関連する問題