将AdMob原生广告放入listView

时间:2016-06-01 21:07:56

标签: android listview admob ads

我想在我的应用中使用新的AdMob原生广告功能。我想在listView中放置原生广告,其中列表中的每20个项目都是一个广告。是否有可能通过Native Express广告实现这一目标?或者我必须使用Natve高级广告吗?

4 个答案:

答案 0 :(得分:4)

那么@Jagjit已经表现出了正确的方法。我会一步一步地写出来
1.创建您自己的自定义适配器(通过扩展BaseAdapter),它将显示为listview项目
2.创建另一个布局资源文件以显示原生广告(设计应类似于上一步中创建的自定义适配器)
3.在getView方法中执行以下操作(在第2位置显示广告)

if (position == 1) {
    rowView = inflater.inflate(R.layout.native_ad_adapter, null);
    NativeExpressAdView adView = (NativeExpressAdView)rowView.findViewById(R.id.adView);
    AdRequest adRequest = new AdRequest.Builder().build();
    adView.loadAd(adRequest);
} else {
    rowView = inflater.inflate(R.layout.my_custom_list, null);
    TextView bigtxt = (TextView) rowView.findViewById(R.id.txt1);
    ...
    ...
}

此处您的自定义适配器为my_custom_list
您会看到广告正在加载。但是存在一个小问题,位置1的实际列表项将不会显示。
4.为此,在填充ListView之前,在列表中添加一个额外的项目。我使用ArrayList所以我可以轻松地做到这一点。我的方法如下

arrayList1.add(1,"ad here");
listview1.setAdapter(new MyAdapter(callerView.getContext(), arrayList1.toArray(new String[arrayList1.size()])));

答案 1 :(得分:2)

方法是扩展BaseAdapter并创建自己的自定义适配器,而不是使用默认的ArrayAdapter。然后,当您想要展示广告时,您需要返回“广告”视图而不是通常的普通视图。这意味着您需要覆盖getCount()以返回更多行(例如,如果您有10行,则表示您需要返回11 = 10个实际内容+ 1个广告)

然后你需要决定创建这个View的位置,我想你可以通过简单地检查位置变量来做到这一点:

if (position == VALUE) {
   // Create and return Ad View 
} else {
   // Create and return a normal View 
}

希望它有所帮助。我发现这是最好的,但希望找到更好的优化方式

答案 2 :(得分:2)

我猜Admobadapter lib正是您要找的......它会让您的适配器自动获取并在listview或recyclerview中的每个X项目中显示广告块。你只需按以下步骤操作:  1.适当类型的设置包装器(基本上有4个包装器 - 用于列表视图,用于回收器视图以显示高级广告,2个用于快速广告)  2.将适配器注入包装器  3.将包装器注入listview / recyclerview  4.用你的数据填充你的适配器,引发onDataSetChanged()然后包装器将自己做这些东西。

此外,它还支持Express原生广告和高级原生广告。根据这个issue,他们很快就会添加Maven / Gradle支持。祝你好运!

答案 3 :(得分:0)

您需要创建自己的自定义列表视图和自定义适配器。

  1. 创建滚动视图和LinearLayout作为孩子
  2. 将模板创建为将处理内容的xml布局
  3. 创建一个类,将您的布局展开到LinearLayout ScrollView。像这样:

    private static void CreateIntemEmptty(Context context, ViewGroup view) {
        LayoutInflater inflater = (LayoutInflater) Home.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View child = inflater.inflate(R.layout.empty, null);
        ViewGroup Prnt =(ViewGroup)view.getParent().getParent();
        Prnt.removeViewInLayout((View)view.getParent());
        ViewGroup.LayoutParams p =new ViewGroup.LayoutParams(Prnt.getWidth(),Prnt.getHeight());
        Prnt.addView(child,p);
    }
    

    在这段代码中我创建一个空元素并添加它

  4. 您可以在孩童时代LinearLayout添加ADS。