ArrayAdapter与admob adview ListView崩溃

时间:2012-05-31 23:22:13

标签: android listview admob android-arrayadapter adview

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在enter image description here

下面的图片中给出了:NullPopinterException

注意:这有效,但每次离开屏幕时都会重新加载添加:

public int getItemViewType(int position) {
     // Don't let ListView try to reuse the views.
     return AdapterView.ITEM_VIEW_TYPE_IGNORE;
 }

2 个答案:

答案 0 :(得分:2)

仅供参考,AdMob的条款要求一次只能在屏幕上显示1个AdView,因此请注意不要在每个列表项中添加AdView。

说到这里,这是一个很好的开源示例ListView adapter,它是calling code,展示了如何在每个X项目中嵌入AdMob广告。适配器本身是另一个适配器对象的包装器,但是以指定的间隔嵌入广告。您可以将ArrayAdapter传递给此适配器,它会为您添加广告。

答案 1 :(得分:0)

请查看answeradmobadapter实现了AdmobFetcher类,该类预取并存储列表中每个位置的广告块。它可以在获取广告块和滚动时阻止列表冻结。