Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 81d299e

Browse files
Merge pull request #141 from MihaiCristianCondrea/codex/create-list-style-ad-layout-and-preferences
Integrate native ad into Android Studio lessons
2 parents 560115f + a4a8da1 commit 81d299e

File tree

7 files changed

+620
-63
lines changed

7 files changed

+620
-63
lines changed

‎app/src/main/java/com/d4rk/androidtutorials/java/ads/managers/NativeAdLoader.java‎

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,22 @@
11
package com.d4rk.androidtutorials.java.ads.managers;
22

33
import android.content.Context;
4+
import android.util.Log;
45
import android.view.LayoutInflater;
56
import android.view.View;
67
import android.view.ViewGroup;
78
import android.widget.Button;
89
import android.widget.ImageView;
910
import android.widget.TextView;
1011

11-
import androidx.annotation.NonNull;
1212
import androidx.annotation.LayoutRes;
13+
import androidx.annotation.NonNull;
1314

1415
import com.d4rk.androidtutorials.java.R;
16+
import com.google.android.gms.ads.AdListener;
1517
import com.google.android.gms.ads.AdLoader;
1618
import com.google.android.gms.ads.AdRequest;
19+
import com.google.android.gms.ads.LoadAdError;
1720
import com.google.android.gms.ads.nativead.MediaView;
1821
import com.google.android.gms.ads.nativead.NativeAd;
1922
import com.google.android.gms.ads.nativead.NativeAdView;
@@ -23,12 +26,21 @@
2326
*/
2427
public class NativeAdLoader {
2528

29+
private static final String TAG = "NativeAdLoader";
30+
2631
public static void load(@NonNull Context context, @NonNull ViewGroup container) {
27-
load(context, container, R.layout.large_home_banner_native_ad);
32+
load(context, container, R.layout.large_home_banner_native_ad, null);
2833
}
2934

3035
public static void load(@NonNull Context context, @NonNull ViewGroup container, @LayoutRes int layoutRes) {
31-
AdLoader adLoader = new AdLoader.Builder(context, context.getString(R.string.native_ad_banner_unit_id))
36+
load(context, container, layoutRes, null);
37+
}
38+
39+
public static void load(@NonNull Context context,
40+
@NonNull ViewGroup container,
41+
@LayoutRes int layoutRes,
42+
@androidx.annotation.Nullable AdListener listener) {
43+
AdLoader.Builder builder = new AdLoader.Builder(context, context.getString(R.string.native_ad_banner_unit_id))
3244
.forNativeAd(nativeAd -> {
3345
LayoutInflater inflater = LayoutInflater.from(context);
3446
NativeAdView adView = (NativeAdView) inflater.inflate(layoutRes, container, false);
@@ -41,8 +53,19 @@ public static void load(@NonNull Context context, @NonNull ViewGroup container,
4153
populateNativeAdView(nativeAd, adView);
4254
container.removeAllViews();
4355
container.addView(adView);
44-
})
45-
.build();
56+
container.requestLayout();
57+
});
58+
59+
builder.withAdListener(listener != null ? listener : new AdListener() {
60+
@Override
61+
public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) {
62+
Log.w(TAG, "Failed to load native ad: " + loadAdError.getMessage());
63+
container.removeAllViews();
64+
container.setVisibility(View.GONE);
65+
}
66+
});
67+
68+
AdLoader adLoader = builder.build();
4669
adLoader.loadAd(new AdRequest.Builder().build());
4770
}
4871

‎app/src/main/java/com/d4rk/androidtutorials/java/ads/views/NativeAdBannerView.java‎

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,9 @@
1010
import androidx.annotation.Nullable;
1111

1212
import com.d4rk.androidtutorials.java.R;
13-
import com.google.android.gms.ads.AdRequest;
1413
import com.d4rk.androidtutorials.java.ads.managers.NativeAdLoader;
14+
import com.google.android.gms.ads.AdListener;
15+
import com.google.android.gms.ads.AdRequest;
1516

1617
/**
1718
* Custom view that acts as a drop-in replacement for AdView and loads
@@ -45,7 +46,11 @@ private void init(@NonNull Context context, @Nullable AttributeSet attrs, int de
4546
}
4647

4748
public void loadAd(AdRequest adRequest) {
48-
NativeAdLoader.load(getContext(), this, layoutRes);
49+
loadAd(adRequest, null);
50+
}
51+
52+
public void loadAd(AdRequest adRequest, @Nullable AdListener listener) {
53+
NativeAdLoader.load(getContext(), this, layoutRes, listener);
4954
}
5055

5156
public void setNativeAdLayout(@LayoutRes int layoutRes) {

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /