IM尝试通过ArrayAdapter将admob AdView放入ListView。目前它加载正常,广告按预期显示在列表视图中。当我滚动时,当包含广告的行不在视图中时,应用会冻结。我认为删除adview会导致一些问题。有办法防止这种情况吗?或者有没有办法检测何时从列表视图中删除行?或者更好的是有没有一种方法可以从列表视图中清除行并保留?
这是我在适配器getView方法中的内容:
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
ChapterModel chapter = getItem(position);
LinearLayout L;
if (row == null) {
LayoutInflater inflater = (LayoutInflater) this.getContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(R.layout.chapter_listview_ad, parent, false);
}
AdRequest request = new AdRequest();
AdView adView;
L=(LinearLayout) row.findViewById(R.id.chapter_row_layout);
adView= new AdView((Activity) this.context,new AdSize(768,90), ADDID);
adView.setAdListener(this);
adView.loadAd(request);
L.addView(adView);
return row;
}
eclipse在
下面的图片中给出了:NullPopinterException注意:这有效,但每次离开屏幕时都会重新加载添加:
public int getItemViewType(int position) {
// Don't let ListView try to reuse the views.
return AdapterView.ITEM_VIEW_TYPE_IGNORE;
}
答案 0 :(得分:2)
仅供参考,AdMob的条款要求一次只能在屏幕上显示1个AdView,因此请注意不要在每个列表项中添加AdView。
说到这里,这是一个很好的开源示例ListView adapter,它是calling code,展示了如何在每个X项目中嵌入AdMob广告。适配器本身是另一个适配器对象的包装器,但是以指定的间隔嵌入广告。您可以将ArrayAdapter传递给此适配器,它会为您添加广告。
答案 1 :(得分:0)
请查看answer。 admobadapter实现了AdmobFetcher类,该类预取并存储列表中每个位置的广告块。它可以在获取广告块和滚动时阻止列表冻结。