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