【问题标题】:Adding multiple AdViews onto a ListView将多个 AdView 添加到 ListView
【发布时间】:2014-10-10 16:13:13
【问题描述】:

我想在 ListView 中构建一个带有广告 (Google SDK) 的新闻应用。我不知道有多少广告,因为我通过 Rest API 接收内容。每个广告也有不同的 AdUnitID。

我已经尝试过这个解决方案:

  1. 在 Android 上,我只能设置一次 ViewTypeCount(不像在 iOS 中我们可以动态设置)。因此,我尝试将 viewTypeCount 设置为较高的数字(通过代码手动)并为我得到的每个广告生成一个新的 ViewType。这是最好的解决方法,但需要大量的 CPU 使用率,几乎没有广告加载时也是如此。
  2. 尝试为 AdView 仅使用一个 Single ViewType,但后来我无法更改 AdUnitID,因为 AdView 有一个限制,该参数只能设置一次。所以我需要为每个广告创建一个新视图。

有没有人有办法解决这个问题?

谢谢

【问题讨论】:

    标签: android listview admob


    【解决方案1】:

    通常我所做的是创建一个实现 ListItemInterface 的基类 ListItem。然后,我让我的所有 ListView 项目(在你的情况下是 News 和你的广告包装器)扩展 ListItem。然后这些项目会动态生成自己的视图。

    当您从 REST 获取新闻和广告时,创建新的 News 或 Ad 对象,将它们添加到您的 List 并调用 adapater.notifyDataSetChanged()。

    如果您认为此解决方案对您有用,但有更多问题,我很乐意澄清(我在一些基于提要的应用程序中使用了类似的东西)。

     public abstract class ListItem implements ListViewInterface{}
    
     public interface ListItemInterface{
         View getView(Context context, LayoutInflater inflater);
     }
    
    public class ListItemAdapter extends BaseAdapter {
        Context context;
        List<ListItem> listItems;
    
        public ListItemAdapter(Context context, List<ListItem> listItems){
            this.context = context;
            this.listItems = listItems;
        }
        ...
        @Override
        public View getView(int i, View view, ViewGroup viewGroup) {
            ListItem item = listItems.get(i);
            return item.getView(context, LayoutInflater.from(context));
        }
    }
    

    【讨论】:

    【解决方案2】:

    问题不在于 ViewType 的数量过多,问题在于 AdView 消耗了大量 CPU。

    我使用了这个解决方法:http://pzoleeblogen.wordpress.com/2014/07/08/android-how-to-solve-adview-cpu-consuming/ 在所有设备上都能完美运行,Android 4.4.x 除外

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 2019-03-20
      • 2016-09-01
      • 2012-11-14
      相关资源
      最近更新 更多