2012-12-21 110 views
0

我想添加動態的textview到列表視圖items.textviews可以是1-2或更多取決於數據我已經成功添加textview但問題是textviews重複滾動。自定義ListView重複的項目

我創建textview的新對象,每次在loop.I意識到Android的嘗試重用現有視圖的問題,但我必須每次都添加新的視圖。

這是我在自定義適配器代碼:

public class ViewHolder { 
    TextView text1; 
    LinearLayout linearLayout; 
    TextView t; 
    TextView t1; 
} 

getView方法

public View getView(int position, View convertView, ViewGroup parent) { 

    ViewHolder holder; 

    if (convertView == null) { 
     convertView = mInflater.inflate(R.layout.two_item_icon_text, null); 
     holder = new ViewHolder(); 
     holder.text1 = (TextView) convertView.findViewById(R.id.text1); 

     convertView.setTag(holder); 
    } else { 

     holder = (ViewHolder) convertView.getTag(); 

    } 

    holder.linearLayout = (LinearLayout) convertView.findViewById(R.id.lin_lay_dynamic); 
    holder.text1.setText("" + DATA1[position]); 
    String tmp, dateparsed; 
    dateparsed = DATA1[position].substring(0, DATA1[position].indexOf(":")); 
    for (int x = 0; x < calendareventholder1.size(); x++) { 

     objHolder = (CalendarEventHolder) calendareventholder1.get(x); 

     if (objHolder.opendate.equals(displaydate[current])) { 

      tmp = objHolder.dtstarttime.toString().substring(0, objHolder.dtstarttime.toString().indexOf(":")); 

      if (Integer.parseInt(tmp) >= Integer.parseInt(dateparsed) && Integer.parseInt(tmp) < Integer.parseInt(dateparsed) + 1) { 
       holder.t = new TextView(convertView.getContext()); 
       holder.t.setText(":-d "); 
       holder.t.setOnClickListener(this); 

       if (Common.isChildSessionAlerted(String.valueOf(objHolder.id), getApplicationContext(), object1)) { 

        holder.t.setText(holder.t.getText() + objHolder.dtstarttime + " " + objHolder.dtendtime + " :-a"); 
       } else { 
        holder.t.setText(holder.t.getText() + objHolder.dtstarttime + " " + objHolder.dtendtime); 
       } 
       holder.t.setTag(objHolder.id); 
       holder.t.setTextSize(Common.getPreferenceInt(getApplicationContext(), Common.PREF_FONT_SIZE, 10)); 
       holder.t.setTextColor(Color.BLACK); 
       holder.t.setText(getSmiledText(ScheduleActivity.this, 
       holder.t.getText().toString())); 
       holder.linearLayout.addView(holder.t); 
       holder.t1 = new TextView(convertView.getContext()); 
       holder.t1.setOnClickListener(this); 
       holder.t1.setText(objHolder.title); 
       holder.t1.setTag(objHolder.id); 

       holder.t1.setTextSize(Common.getPreferenceInt(getApplicationContext(), Common.PREF_FONT_SIZE, 10)); 
       holder.t1.setTextColor(Color.BLACK); 
       holder.linearLayout.addView(holder.t1); 
      } 
     } 
    } 
    return convertView; 
} 

回答

1

它是一個有點難以真正理解什麼是持有人,因爲它是不是超級描述性的,但如果我我正在閱讀你的問題,你得到重複項目的原因是因爲你只是添加Views並且從不刪除之前的內容。 ListView回收視圖,意味着之前在那裏停留的內容。當它滾動時,它實際上會重複使用視圖而不是創建新視圖。我不會詳細討論,因爲在這裏有一堆問題存在類似的問題。但在頂部你應該做

getView() { 
    /*previous stuff, and holder.linearLayout must have been set!*/ 
    if(holder.linearLayout.getChildCount() > 0) 
     holder.linearLayout.removeAllViews(); 

這樣,任何已經存在的視圖都將被刪除。最後一件事,你也應該檢查出this。非常有助於理解爲什麼你必須做我發佈的內容。

+0

非常感謝安迪,工作。 –

+0

沒問題。一件很簡單的事情,你應該做一次檢查以確定是否調用'removeAllViews'。在LinearLayout中沒有孩子時,沒有必要調用它。我會更新它。 – Andy

+0

感謝數百萬安迪,你拯救了我的一天。 –