【问题标题】:Adding multiple AdViews onto a ListView将多个 AdView 添加到 ListView
【发布时间】:2014-10-10 16:13:13
【问题描述】:
我想在 ListView 中构建一个带有广告 (Google SDK) 的新闻应用。我不知道有多少广告,因为我通过 Rest API 接收内容。每个广告也有不同的 AdUnitID。
我已经尝试过这个解决方案:
- 在 Android 上,我只能设置一次 ViewTypeCount(不像在 iOS 中我们可以动态设置)。因此,我尝试将 viewTypeCount 设置为较高的数字(通过代码手动)并为我得到的每个广告生成一个新的 ViewType。这是最好的解决方法,但需要大量的 CPU 使用率,几乎没有广告加载时也是如此。
- 尝试为 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));
}
}