リストには 2 種類のビューがあります。
- ニュースビュー
- 広告ビュー。
アダプタの 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;
}
正常に動作します。私はこれが正しい方法ではないことを知っています。次に、前の方法を使用したときにコードが機能しないのはなぜですか。どんな助けでも大歓迎です。