1

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

2 回答 2

2

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

话虽如此,这里有一个很棒的 ListView适配器的开源示例,它调用的代码显示了如何在每个 X 项中嵌入 AdMob 广告。适配器本身是另一个适配器对象的包装器,但会以指定的间隔嵌入广告。您可以将您的 ArrayAdapter 传递给此适配器,它会为您放入广告。

于 2012-06-01T18:23:10.923 回答
0

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

于 2016-08-08T12:36:20.120 回答