2016-07-21 6 views
5

Facebookのネイティブ広告をGridViewに統合しました。今のところ、私はテスト広告を表示しています。それは、ビデオを再生する人以外は正常に動作します。GridViewのFacebookネイティブ広告:MediaViewはグレーの矩形を表示します

MediaViewは、ユーザーがGridViewとやりとりしない場合、ビデオをうまく再生します。 GridViewがスクロールされると、画面に広告が再び表示されると、ビデオは一時停止され、再開されます。

グリッド上下数回スクロールした後、MediaViewはもうビデオを表示し、簡単にグレーの矩形を表示しません。

好奇心の怪しさから、MediaViewがグレーのときに私のデバイスにUi Automatic Viewerを実行しようとしました。面白いことに気付いたが、私は本当に意味をなさない。

ビュー階層では、いくつかの子FrameLayout(アダプタによって与えられたビューのコンテナ)を持つGridViewが表示されます。これには、ネイティブ広告と他のビューが含まれます。 MediaViewが灰色のとき

しかし、そのでframeLayout は、ビュー階層に表示されません!しかし、それは画面上でうまくレンダリングされます!

私は非常に私が見るものに困惑しています。

また、私はRecyclerViewでこれらの広告を統合したときに、私はこの問題を持っていなかった(あるいは少なくともそれに気づきませんでした)。

コードについて説明しましょう。私は、Facebookネイティブ広告の表示を指すリファレンスを持っています。

提案がここ

を:)歓迎GridViewコントロールにビューを提供するアダプターのコードです:ここで

public class AdapterGridGallery extends BaseAdapter implements AdListener { 

    private static int POSITION_AD = 4; 
    private List<QuizzModel> listQuizzes; 

    int heightViews; 
    FragmentGallery fragmentGallery; 

    View facebookAdView; 
    private NativeAd facebookNativeAd; 
    private boolean nativeAdSet = false; 

    public AdapterGridGallery(FragmentGallery fragment, int height) { 
     heightViews = height; 
     fragmentGallery = fragment; 
     facebookNativeAd = new NativeAd(fragment.getContext(), "my_tag"); 
     facebookNativeAd.setAdListener(this); 
     facebookNativeAd.loadAd(); 
    } 

    public void updateData(List<QuizzModel> list) { 
     listQuizzes = list; 
     notifyDataSetChanged(); 
    } 

    @Override 
    public int getCount() { 
     return listQuizzes != null ? listQuizzes.size() + 1 : 0; 
    } 

    @Override 
    public Object getItem(int i) { 
     return listQuizzes.get(i); 
    } 

    @Override 
    public long getItemId(int i) { 
     return listQuizzes.get(i).getId(); 
    } 

    @Override 
    public int getItemViewType(int position) { 
     if (position == POSITION_AD) 
      return 0; 
     else 
      return 1; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup viewGroup) { 
     View viewQuizz = null; 
     switch (getItemViewType(position)) { 
      case 0: 
       if (facebookAdView == null) { 
        facebookAdView = LayoutInflater.from(viewGroup.getContext()) 
          .inflate(R.layout.view_facebook_native, viewGroup, false); 
        //Settings the height of the view 
        AbsListView.LayoutParams params = (AbsListView.LayoutParams) facebookAdView.getLayoutParams(); 
        params.height = heightViews; 
        params.width = AbsListView.LayoutParams.MATCH_PARENT; 
        facebookAdView.setLayoutParams(params); 
       } 

       viewQuizz = facebookAdView; 
       viewQuizz.setTag(0); 

       if (facebookNativeAd.isAdLoaded()) { 
        if (!nativeAdSet) { 
         Log.d("NativeAdList", "update views resources"); 
         nativeAdSet = true; 

         ImageView nativeAdIcon = (ImageView) facebookAdView.findViewById(R.id.native_ad_icon); 
         TextView nativeAdTitle = (TextView) facebookAdView.findViewById(R.id.native_ad_title); 
         TextView nativeAdBody = (TextView) facebookAdView.findViewById(R.id.native_ad_body); 
         MediaView nativeAdMedia = (MediaView) facebookAdView.findViewById(R.id.native_ad_media); 
         TextView nativeAdSocialContext = (TextView) facebookAdView.findViewById(R.id.native_ad_social_context); 
         Button nativeAdCallToAction = (Button) facebookAdView.findViewById(R.id.native_ad_call_to_action); 


         nativeAdSocialContext.setText(facebookNativeAd.getAdSocialContext()); 
         nativeAdCallToAction.setText(facebookNativeAd.getAdCallToAction()); 
         nativeAdTitle.setText(facebookNativeAd.getAdTitle()); 
         nativeAdBody.setText(facebookNativeAd.getAdBody()); 
         // Downloading and setting the ad icon. 
         NativeAd.Image adIcon = facebookNativeAd.getAdIcon(); 
         NativeAd.downloadAndDisplayImage(adIcon, nativeAdIcon); 
         // Download and setting the cover image. 
         nativeAdMedia.setNativeAd(facebookNativeAd); 
         nativeAdMedia.setAutoplay(true); 
         facebookNativeAd.registerViewForInteraction(facebookAdView); 
         nativeAdCallToAction.setVisibility(View.VISIBLE); 
        } else { 
         Log.d("NativeAdList", "views resources already set"); 
        } 
       } else { 
        Log.d("NativeAdList", "nativeAdCallToAction is set invisible"); 
        nativeAdCallToAction.setVisibility(View.INVISIBLE); 
       } 
       break; 
      case 1: 
       view = new CustomView(); 
      } 
      return view; 
    } 

    @Override 
    public void onError(Ad ad, AdError adError) { 
    } 

    @Override 
    public void onAdLoaded(Ad ad) { 
     notifyDataSetChanged(); 
    } 

    @Override 
    public void onAdClicked(Ad ad) { 

    } 
} 

は、UI Automatorのビューアのスクリーンショットです。

enter image description here

答えて

3

あなたは私がRecyclerViewでこれらの広告を統合したときに、私はこの 問題を持っていなかった(あるいは少なくともそれに気付かなかった)

を言ったように。

私はあなたのために完全に罰金そのリサイクルビューの仕事を解釈。 Gridviewで同じことをやり直すのではなく、LayoutManagerを使用して、リサイクルビューをgrid or listに変換してください。

+1

はい、私は同様の表示を取得するためにGridLayoutManagerを使用。事は、一見、私はRecyclerViewを使用することはできないだろうと思ったので、私は、(私はリストをレンダリングするために起動したときに表示するビューの種類を知りません)「動的」RecyclerViewを取り込む必要があります。しかし、私はそれを行う方法を理解し、GridViewについて忘れてしまった。 ええ、この問題の可能な解決策は、ListView/GridViewではなくRecyclerViewを使用することです。 – Gordak

+0

ListView/GridViewよりもRecyclerviewをお勧めします。それがあなたの問題を解決したら、このスレッドを閉じることができます。 –

関連する問題