2015-10-15 48 views
0

在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; 
} 
+0

什麼關於創建一個新的模式l(假設'Kanals')包含一個布爾標誌,以表明它的官方還是正式的?然後,您的適配器只處理一個模型,並且您可以根據此標誌加載所需的xml。 – Rami

+1

是的,謝謝拉米 – Bad0

回答

0

問題是getCount getView將根據kanallar

public int getCount() { 
    return kanallar.size(); 
} 

大小打電話,但你從​​officialKanalsnormalKanalsgetView

獲得價值試着像實驗

if(currentKanal instanceof OfficialKanal){ 
     holder.tv3.setText(kanallar.get(position).getKanaladi()); 
    } 
    if(currentKanal instanceof NormalKanal){ 
     holder.tv1.setText(kanallar.get(position).getKanaladi()); 
    } 
+0

是的,但如果我改變它,listview不會形成真正的。 – Bad0

+0

請參閱編輯的代碼並僅從「kanallar」獲取值 –

+0

getKanalAdi不適用於「kanallar」數組。 – Bad0

相關問題