我的列表中有两种类型的视图。
- 新闻视图
- 广告视图。
适配器的 getCount() 方法返回项目的总数。但是 getview 总是将位置返回为 0 或 1。我使用了 getViewType() 和 getViewCount() 方法。我也使用了 Holder。但是,它仍然重复这些项目。
这是我的代码:
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public int getItemViewType(int position) {
if (getItem(position).inMobiNativeAd == null) {
return NEWS_TYPE;
} else
return NATIVE_AD_TYPE;
}
@Override
public int getCount() {
return super.getCount();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
int viewType = getItemViewType(position);
if (viewType == NEWS_TYPE) {
return getNewsView(position, convertView, parent);
} else {
return getNativeAdView(position, convertView, parent);
}
}
private View getNewsView(int position, View convertView, ViewGroup parent) {
Holder holder;
if (convertView == null) {
convertView = mInflator.inflate(R.layout.news_layout, parent, false);
holder.title=(convertView)findViewById(R.id.title);
-------
------
convertView.setTag(holder);
} else {
holder = (Holder) convertView.getTag();
}
--------
------
return convertView;
}
private View getAdView(int position, View convertView, ViewGroup parent) {
Holder holder;
if (convertView == null) {
convertView = mInflator.inflate(R.layout.ad_layout, parent, false);
holder.title=(convertView)findViewById(R.id.title);
-------
------
convertView.setTag(holder);
} else {
holder = (Holder) convertView.getTag();
}
--------
------
return convertView;
}
当我使用此代码时,列表项会重复。但是当我使用时,
@Override
public int getViewTypeCount() {
return getCount();
}
@Override
public int getItemViewType(int position) {
return position;
}
它工作正常。我知道这不是正确的方法。那么为什么我的代码在使用以前的方法时不起作用。任何帮助,将不胜感激。