繁体   English   中英

将AdMob原生广告放入listView

[英]Putting an AdMob native ad in a listView

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

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

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()])));

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

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

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

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

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

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

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

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

     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添加为子项。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM