【问题标题】:Admob in a recyclerview回收站视图中的 Admob
【发布时间】:2017-05-23 20:31:35
【问题描述】:

我正在尝试在回收站视图中添加 Admob 横幅。

我的问题是初始化 Admob。

我有 2 个视图:Adview 和 list.xml。 Adview 上有 Admob xml 横幅。

适配器

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v;
    if (viewType == ad) {
        ad_act = 1;
        v = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.adview, parent, false);
    }
    else {
        ad_act = 0;
        v = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.list, parent, false);
    }
    return new ViewHolder(v);
}

我需要初始化 Admob,所以我尝试将它添加到我的主要活动中,而不是我的适配器中:

onCreate 内的主 Activity:

ViewGroup content = (ViewGroup) findViewById(R.id.content_frame);
getLayoutInflater().inflate(R.layout.activity_main, content, true);

MobileAds.initialize(this, "ca-app-pub-3940256099942544~3347511713");
mAdView = (AdView) findViewById(R.id.adView);
AdRequest adRequest = new AdRequest.Builder().build();
mAdView.loadAd(adRequest);

但这给了我一个空异常 R.id.adView

java.lang.NullPointerException: 尝试调用虚方法 'void com.google.android.gms.ads.AdView.loadAd(com.google.android.gms.ads.AdRequest)' 在空对象引用上

因为我没有在 main_activity 中添加 r.layout.adview。有什么想法可以在那里添加吗?

【问题讨论】:

    标签: android nullpointerexception admob


    【解决方案1】:

    如您所述,问题在于您正在 Activity 的布局中搜索 AdView,但在 onCreate 期间找不到该布局。只需使用 onCreate 中的构造函数以编程方式创建 AdView,并将它们与支持适配器的数据项一起保存在一个列表中。

    如果您有兴趣,我们提供了如何使用 Native Express 格式执行此操作的示例,该格式可以具有与横幅相同的大小,但您可以选择自行设置广告样式。如果您喜欢这些,它很容易适应横幅:

    【讨论】:

    • 更新;原生快捷广告已弃用。而且目前并非所有开发者都可以使用原生广告。