在getView方法中,我嘗試設置textview文本。我有兩種不同類型的對象。如果我在參數中使用「position」,它通常會給出「IndexOutOfBoundsException」錯誤。我怎樣才能適當地設置他們每個人的文本?Android ListView多行在getView方法中給出視圖值
Context context;
ArrayList<OfficialKanal> officialKanals;
ArrayList<NormalKanal> normalKanals;
ArrayList<Object> kanallar = new ArrayList();
int OFFICIAL_KANAL = 0;
int NORMAL_KANAL= 1;
LayoutInflater lala;
public KanalAdapter(Context context , ArrayList<OfficialKanal> officiallar , ArrayList<NormalKanal> normaller){
this.context = context;
officialKanals = officiallar;
normalKanals = normaller;
for(int i = 0 ; i < officiallar.size() ; i++){
kanallar.add(officiallar.get(i));
}
for(int i = 0 ; i < normaller.size() ; i++){
kanallar.add(normaller.get(i));
}
Log.i("tago" , "tagtag");
lala = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public int getCount() {
return kanallar.size();
}
public Object getItem(int i) {
return kanallar.get(i);
}
public long getItemId(int i) {
return i;
}
public int getItemViewType(int position) {
Object item = getItem(position);
if(item instanceof NormalKanal){
return NORMAL_KANAL;
}else if (item instanceof OfficialKanal){
return OFFICIAL_KANAL;
}
return -1;
}
@Override
public int getViewTypeCount() {
return 2;
}
public View getView(int position, View convertView, ViewGroup viewGroup) {
KanalHolder holder = null;
int pozisyon = 0;
Object currentKanal = getItem(position);
if(convertView==null) {
holder = new KanalHolder();
if (currentKanal instanceof OfficialKanal) {
convertView = lala.inflate(R.layout.officialkanal, null);
holder.image2 = (ImageView) convertView.findViewById(R.id.imageView5);
holder.tv3 = (TextView) convertView.findViewById(R.id.textView4);
holder.tv4 = (TextView) convertView.findViewById(R.id.textView8);
holder.buton2 = (Button) convertView.findViewById(R.id.button7);
holder.buton3 = (Button) convertView.findViewById(R.id.button8);
Log.i("tago", "tagtagatagtagtagatg");
}
if (currentKanal instanceof NormalKanal) {
convertView = lala.inflate(R.layout.normalkanal, null);
holder.image1 = (ImageView) convertView.findViewById(R.id.imageView5);
holder.tv1 = (TextView) convertView.findViewById(R.id.textView4);
holder.tv2 = (TextView) convertView.findViewById(R.id.textView8);
holder.buton1 = (Button) convertView.findViewById(R.id.button8);
Log.i("tago", "tagtagtag");
}
convertView.setTag(holder);
}else{
holder = (KanalHolder)convertView.getTag();
}
if(currentKanal instanceof OfficialKanal){
holder.tv3.setText(officialKanals.get(position).getKanaladi());
}
if(currentKanal instanceof NormalKanal){
holder.tv1.setText(normalKanals.get(position).getKanaladi());
}
return convertView;
}
static class KanalHolder{
public ImageView image1,image2;
public TextView tv1 , tv2,tv3,tv4;
public Button buton1,buton2,buton3;
}
什麼關於創建一個新的模式l(假設'Kanals')包含一個布爾標誌,以表明它的官方還是正式的?然後,您的適配器只處理一個模型,並且您可以根據此標誌加載所需的xml。 – Rami
是的,謝謝拉米 – Bad0