2015-10-15 74 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

相关问题