将AdView添加为项

时间:2016-07-27 09:17:52

标签: android listview scroll adview

我正在我的Android应用中实现Google Ads。大多数情况下,我有兴趣在ListView内实施广告。例如,每10个元素我显示一个包含AdView的项目。只有一个广告会显示不同的时间。以下是我的代码。它有效,广告显示在ListView,应用程序不会崩溃,但有一个小问题。当我滚动列表时,当它显示AdView的项目时,它会抓住一点,滚动不是那么顺利。我在没有显示广告的情况下尝试了这个列表,滚动很好。

   NewsHomeAdapter(ArrayList<AdMobInterfaceList> items, Context context) {

        this.items = items;
        this.mContext = context;
        // member variable
        // iteron mbi objektet e bizneset dhe kontrollon cfare tipi eshte. Ne
        // varesi te tipit theret adapterin e tij
        for (AdMobInterfaceList item : items) {

            if (item.getType() == 0) {
                rows.add(new AdMobItemAdapter(LayoutInflater.from(mContext),
                        item, mContext));
            }
            if (item.getType() == 1) {
                rows.add(new NewsItemAdapter(LayoutInflater.from(mContext),
                        item, mContext));
            }


        }
    }

    @Override
    public int getViewTypeCount() {
        return 2;
    }

    @Override
    public int getItemViewType(int position) {
        return rows.get(position).getViewType();
    }

    public int getCount() {
        return rows.size();
    }

    public void updateNjoftimeList(ArrayList<AdMobInterfaceList> items) {


        for (AdMobInterfaceList item : items) {

            if (item.getType() == 0) {
                rows.add(new AdMobItemAdapter(LayoutInflater.from(mContext),
                        item, mContext));
            }
            if (item.getType() == 1) {
                rows.add(new NewsItemAdapter(LayoutInflater.from(mContext),
                        item, mContext));
            }


        }

        this.notifyDataSetChanged();

    }


    public void updateNjoftimeFilterList(ArrayList<AdMobInterfaceList> items) {

        //mNjoftime.clear();
        //mNjoftime.addAll(newList);


        rows.clear();

        for (AdMobInterfaceList item : items) {

            if (item.getType() == 0) {
                rows.add(new AdMobItemAdapter(LayoutInflater.from(mContext),
                        item, mContext));
            }
            if (item.getType() == 1) {
                rows.add(new NewsItemAdapter(LayoutInflater.from(mContext),
                        item, mContext));
            }
        }

        this.notifyDataSetChanged();

    }

    public Object getItem(int position) {
        return position;
    }

    public long getItemId(int position) {
        return position;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        return rows.get(position).getView(convertView);
    }
}

NewsItemAdapter.class

public class NewsItemAdapter implements ListsItemInterface {

    final private AdMobInterfaceList item;
    private LayoutInflater inflater;
    private Context mContext;

    public NewsItemAdapter(LayoutInflater inflater, AdMobInterfaceList item, Context context) {
        this.item = item;
        this.inflater = inflater;
        this.mContext = context;
    }

    public View getView(View convertView) {
        ViewHolder holder;
        if (convertView == null) {
            convertView = inflater.inflate(R.layout.news_home_row, null);
            holder = new ViewHolder();
            holder.tittle = (TextView) convertView.findViewById(R.id.tittle);
            holder.category = (TextView) convertView.findViewById(R.id.category);
            holder.desc = (TextView) convertView.findViewById(R.id.desc);
            holder.desc.setVisibility(View.GONE);
            holder.published_time = (TextView) convertView.findViewById(R.id.published_time);
            holder.news_image = (ImageView) convertView.findViewById(R.id.news_image);

            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        Typeface typeFace = Typeface.createFromAsset(mContext.getAssets(),
                "fonts/Lato-Regular.ttf");

        holder.tittle.setTypeface(typeFace);
        holder.desc.setTypeface(typeFace);
        holder.published_time.setTypeface(typeFace);
        holder.category.setTypeface(typeFace);

        holder.tittle.setText(((NewsItem) item).getTittle());
        holder.desc.setText(((NewsItem) item).getDesc());
        holder.published_time.setText(((NewsItem) item).getPublishedTimeString());
        holder.category.setText(((NewsItem) item).getCategory());

        //holder.news_image.getLayoutParams().width = 0;

        if (!((NewsItem) item).getImageUrl().isEmpty()) {
            UrlImageViewHelper.setUrlDrawable(holder.news_image, ((NewsItem) item).getImageUrl(), R.drawable.watermark_ikub);
        } else {
            holder.news_image.getLayoutParams().width = 0;
        }
        return convertView;
    }


    public int getViewType() {
        return 1;
    }

    static class ViewHolder {
        ImageView news_image=null;
        TextView tittle;
        TextView desc;
        TextView published_time;
        TextView category;

    }
}

AdMobItemAdapter.class

public class AdMobItemAdapter implements ListsItemInterface {

    final private AdMobInterfaceList item;
    private LayoutInflater inflater;
    private Context mContext;

    public AdMobItemAdapter(LayoutInflater inflater, AdMobInterfaceList item, Context context) {
        this.item = item;
        this.inflater = inflater;
        this.mContext = context;
    }

    public View getView(View convertView) {
        ViewHolder holder;

        //we have a don't have a converView so we'll have to create a new one
        if (convertView == null) {
            convertView = inflater.inflate(R.layout.add_mob_layout, null);
            holder = new ViewHolder((AdView)convertView.findViewById(R.id.adView)) ;
            convertView.setTag(holder);

        } else {
            //get the holder back out
            holder = (ViewHolder)convertView.getTag();
        }

        holder.ad.setFocusable(false);
       AdRequest adRequest = new AdRequest.Builder()
                .addTestDevice("134BDAE1F7410A5CD779E89C5C8CBC20")
                .build();
        holder.ad.loadAd(((AdMobItem)item).getAdRequest());

        return convertView;
    }


    public int getViewType() {
        return 0;
    }

    public  class ViewHolder {
        public AdView ad;


        public ViewHolder(AdView ad) {
            this.ad = ad;

        }
    }
}

这些是我用于ListView的适配器的代码。我认为原因是我为每个项目加载了广告。但我不知道如何处理这个问题。有什么建议吗?

0 个答案:

没有答案