将多个AdView添加到ListView

时间:2014-10-10 16:13:13

标签: android listview admob

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

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

  1. 在Android上,我只能将ViewTypeCount设置一次(不像在我们可以动态执行此操作的iOS中)。所以我尝试将viewTypeCount设置为一个较大的数字(由Code手动设置)并为我获得的每个Ad生成一个新的ViewType。这是最好的解决方法,但是在几乎没有加载广告时也需要大量的CPU使用。
  2. 尝试仅为AdView使用一个单一ViewType,但之后我无法更改AdUnitID,因为AdView存在限制,此参数只能设置一次。所以我需要为每个广告创建一个新视图。
  3. 有没有人有解决方案来解决这个问题?

    由于

2 个答案:

答案 0 :(得分:1)

通常我所做的是创建一个实现ListItemInterface的基类ListItem。然后,我将所有ListView项目(在您的情况下,包括新闻和广告包装器)扩展ListItem。然后,这些项目即时生成自己的视图。

当您从REST获取新闻和广告时,请创建新的新闻或广告对象,将其添加到您的列表并调用adapater.notifyDataSetChanged()。

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

 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));
    }
}

答案 1 :(得分:1)

问题不在于ViewTypes数量多,问题是AdViews消耗了大量CPU。

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