0
我希望在列表視圖中插入廣告,但是從admob提供的示例中,它在構造函數中使用BaseAdapter
,而我使用的是ArrayList<Hashmap>
因此,我現在非常困惑,請幫助我出去了。getViewTypeCount&getItemViewType方法的麻煩
public class ListAdapter extends BaseAdapter implements AdListener{
private static String admobId = null;
private Activity activity;
private ArrayList<HashMap<String, String>> data;
private static LayoutInflater inflater=null;
public ListAdapter(Activity a, ArrayList<HashMap<String, String>> d) {
this.activity = a;
this.data = d;
inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public int getCount() {
return data.size()+1; //Adding one ads
}
public Object getItem(int position) {
if (isItemAnAd(position)) {
return null;
}
return data.get(getOffsetPosition(position));
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
View vi=convertView;
if (isItemAnAd(position)) {
if (vi instanceof AdView) {
Log.d(LOGTAG, "I am reusing an ad");
return vi;
} else {
Log.d(LOGTAG, "I am creating a new ad");
AdView adView = new AdView(activity, AdSize.SMART_BANNER, getAdmobId(activity));
AdRequest adRequestBanner = new AdRequest();
adView.loadAd(adRequestBanner);
return adView;
}
} else {
vi = inflater.inflate(R.layout.listview, null);
TextView subject = (TextView)vi.findViewById(R.id.subject);
TextView permalink = (TextView)vi.findViewById(R.id.permalink);
HashMap<String, String> map = new HashMap<String, String>();
map = data.get(position);
//Setting all values in listview
subject.setText(map.get(ViewPagerAdapter.KEY_NEWS_SUBJECT));
permalink.setText(map.get(ViewPagerAdapter.KEY_NEWS_PERMA));
return vi;
}
}
@Override
public int getViewTypeCount() {
//what should i write here?
}
@Override
public int getItemViewType(int position) {
//what should i write here?
}
//Ads
@Override
public boolean areAllItemsEnabled() {
return false;
}
@Override
public boolean isEnabled(int position) {
return (!isItemAnAd(position));
}
private boolean isItemAnAd(int position) {
// Place an ad at the first
return (position == 0);
}
private int getOffsetPosition(int position) {
return position - 1;
}
}
我應該getViewTypeCount()
& getItemViewType()
寫什麼方式。
更新:
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public int getItemViewType(int position) {
if (isItemAnAd(position)) {
return 0;
} else {
return 1;
}
}
嗨尼基塔,我跟着你的方法,但有一個小問題。廣告接管第一個listview項並導致IndexOutOfBoundsException:無效索引13,大小爲13 ?原因是什麼? – Eric
嗯,問題是當你在'getView'方法中,position是1時,這意味着你需要從數據中獲取第一項,所以你應該在這一行中使用'getOffsetPosition'而不是'position':'map = data .get(position);' –
非常感謝Nikita!它現在有效。順便問一下,如果我想讓listview中的一個項目與其他項目不同,我使用類似的方法? getviewtypecount()變成3?例如 – Eric