लोड करने से पहले खाली स्थान प्रदर्शित करता है मैंने अपने आवेदन में Admob मूल विज्ञापन लागू किया है। इसे मेरे रेसीलर व्यू में प्रत्येक 4 आइटम के लिए एक बार प्रदर्शित करने के लिए रखा गया है। विज्ञापन प्रदर्शित होने से पहले समस्या है, विज्ञापन लोड होने के दौरान लगभग 3 से 5 सेकंड तक रिक्त स्थान दिखाई देगा। मुझे इस रिक्त स्थान को हटाने और विज्ञापन को केवल रीसाइक्लिंग व्यू आइटम्स के बीच लोड करने में सहायता चाहिए जब मूल विज्ञापन पूरी तरह से लोड हो। मैंने विज्ञापनों को प्रदर्शित करने से पहले और बाद में नीचे एक स्क्रीनशॉट संलग्न किया है।एक Recylerview के अंदर Admob मूल विज्ञापन
एडाप्टर कोड के नीचे की तरह दिखता है।
public class MovieAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private Context mContext;
private List<Movie> mList;
private LayoutInflater mLayoutInflater;
private static final int DEFAULT_VIEW_TYPE = 1;
private static final int NATIVE_AD_VIEW_TYPE = 2;
public MovieAdapter(Context c, List<Movie> l) {
this(c, l, true, true);
}
public MovieAdapter(Context c, List<Movie> l, boolean wa, boolean wcl) {
mContext = c;
mList = l;
mLayoutInflater = (LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getItemViewType(int position) {
if (position!=0 && position%4 == 0) {
return NATIVE_AD_VIEW_TYPE;
}
return DEFAULT_VIEW_TYPE;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
View v;
switch (viewType) {
default:
v = mLayoutInflater.inflate(R.layout.item_movie_card, viewGroup, false);
return new MyViewHolder(v);
case NATIVE_AD_VIEW_TYPE:
v = mLayoutInflater.inflate(R.layout.list_item_native_ad, viewGroup, false);
return new NativeAdViewHolder(v);
}
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
if (!(holder instanceof MyViewHolder)) {
return;
}
MyViewHolder myViewHolder = (MyViewHolder) holder;
myViewHolder.tvName.setText(mList.get(position).getName());
myViewHolder.tvGenre.setText(mList.get(position).getGenre());
ControllerListener listener = new BaseControllerListener() {
@Override
public void onFinalImageSet(String id, Object imageInfo, Animatable animatable) {
super.onFinalImageSet(id, imageInfo, animatable);
}
@Override
public void onFailure(String id, Throwable throwable) {
super.onFailure(id, throwable);
}
@Override
public void onIntermediateImageFailed(String id, Throwable throwable) {
super.onIntermediateImageFailed(id, throwable);
}
@Override
public void onIntermediateImageSet(String id, Object imageInfo) {
super.onIntermediateImageSet(id, imageInfo);
}
@Override
public void onRelease(String id) {
super.onRelease(id);
}
@Override
public void onSubmit(String id, Object callerContext) {
super.onSubmit(id, callerContext);
}
};
int w = 0;
if (myViewHolder.ivMovie.getLayoutParams().width == FrameLayout.LayoutParams.MATCH_PARENT
|| myViewHolder.ivMovie.getLayoutParams().width == FrameLayout.LayoutParams.WRAP_CONTENT) {
Display display = ((Activity) mContext).getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
try {
w = size.x;
} catch (Exception e) {
w = display.getWidth();
}
}
Uri uri = Uri.parse(DataUrl.getUrlCustom(mList.get(position).getUrlPhoto(), w));
DraweeController dc = Fresco.newDraweeControllerBuilder()
.setUri(uri)
.setTapToRetryEnabled(true)
.setControllerListener(listener)
.setOldController(myViewHolder.ivMovie.getController())
.build();
myViewHolder.ivMovie.setController(dc);
}
@Override
public int getItemCount() {
return mList.size();
}
public void addListItem(Movie c, int position) {
mList.add(c);
notifyItemInserted(position);
}
public void removeListItem(int position) {
mList.remove(position);
notifyItemRemoved(position);
}
public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
public SimpleDraweeView ivMovie;
public TextView tvName;
public TextView tvGenre;
public ImageButton imageButton;
public MyViewHolder(View itemView) {
super(itemView);
ivMovie = (SimpleDraweeView) itemView.findViewById(R.id.iv_car);
tvName = (TextView) itemView.findViewById(R.id.tv_model);
tvGenre = (TextView) itemView.findViewById(R.id.tv_brand);
imageButton = (ImageButton) itemView.findViewById(R.id.like_button);
}
@Override
public void onClick(View v) {
}
}
public class NativeAdViewHolder extends RecyclerView.ViewHolder {
private final NativeExpressAdView mNativeAd;
public NativeAdViewHolder(final View itemView) {
super(itemView);
mNativeAd = (NativeExpressAdView) itemView.findViewById(R.id.nativeAd);
mNativeAd.setAdListener(new AdListener() {
@Override
public void onAdLoaded() {
super.onAdLoaded();
}
@Override
public void onAdClosed() {
super.onAdClosed();
}
@Override
public void onAdFailedToLoad(int errorCode) {
super.onAdFailedToLoad(errorCode);
}
@Override
public void onAdLeftApplication() {
super.onAdLeftApplication();
}
@Override
public void onAdOpened() {
super.onAdOpened();
}
});
AdRequest adRequest = new AdRequest.Builder()
.addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
.build();
mNativeAd.loadAd(adRequest);
}
}
}
native_ad XML लेआउट फ़ाइल नीचे की तरह दिखता है।
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:ads="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="132dp">
<com.google.android.gms.ads.NativeExpressAdView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/nativeAd"
ads:adSize="FULL_WIDTHx132"
ads:adUnitId="@string/native_ad_unit"/>
एक ही समस्या का सामना कर रहे हैं, तो आप मुझे अपने एडाप्टर को अपडेट करने के लिए बस कॉल करें, क्या आप मुझे यह बता सकते हैं कि आपने खंड में मूल एक्सप्रेस विज्ञापन दृश्य कैसे जोड़ा – shobhan