【问题标题】:Putting an AdMob native ad in a listView将 AdMob 原生广告放入 listView
【发布时间】:2016-06-01 21:07:55
【问题描述】:

我想在我的应用中使用新的 AdMob 原生广告功能。我想在 listView 中放置一个原生广告,其中列表中每 20 个左右的项目是一个广告。是否可以通过原生快速广告实现这一目标?还是我必须使用 Natve 高级广告?

【问题讨论】:

    标签: android listview admob ads


    【解决方案1】:

    @Jagjit 展示了正确的方法。我会一步一步写
    1. 创建您自己的自定义适配器(通过扩展BaseAdapter),它将显示为列表视图项
    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的list的实际项不会显示出来。
    4. 为此,在填充ListView 之前向列表中添加一个额外的项目。我用过ArrayList,所以我可以很容易地做到这一点。我的做法如下

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

    【讨论】:

    • 能否请您给我们完整的类作为示例(AdapterClass 和布局)。这将非常有用!
    • 顺便说一句,由于您的代码,my_custom_list 不是适配器,而是 XML 视图中的 id :)
    • my_custom_list 是作为适配器创建的 XML 文件,它不是单个视图,而是整个设计文件(膨胀运行时的适配器)
    【解决方案2】:

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

    然后你需要决定在哪个位置创建这个View,我想你可以通过简单地检查位置变量来完成:

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

    希望对您有所帮助。我发现这是最好的,但希望为此找到更好的优化方法

    【讨论】:

      【解决方案3】:

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

      它还支持快速原生广告和高级原生广告。根据issue,他们将很快添加 Maven/Gradle 支持。祝你好运!

      【讨论】:

        【解决方案4】:

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

        1. 创建一个滚动视图和一个 LinearLayout 作为子视图
        2. 将您的模板创建为将处理您的内容的 xml 布局
        3. 创建一个类,它将把你的布局膨胀到 LinearLayoutScrollView 中。像这样:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-11-29
          • 2018-05-12
          • 1970-01-01
          • 2018-07-09
          • 2020-07-11
          • 2016-10-29
          • 2020-12-17
          • 2016-10-24
          相关资源
          最近更新 更多