我正在我的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
的适配器的代码。我认为原因是我为每个项目加载了广告。但我不知道如何处理这个问题。有什么建议吗?