2011-02-10 3 views
1

나는 재활용 된 목록보기 데이터를 피하기위한 표준 패턴을 따르고 있다고 믿지만 아직 실패합니다. 평소와 같이, 목록보기의 마지막 두 항목 당신이 경우에도 ViewHolder의 모든 구성원에 대한 내용을 설정해야ListAdapters에서 재활용품 문제가 발생하지 않도록하려면 어떻게해야합니까?

public static class ViewHolder { 
    public ImageView img1; 
    public ImageView img2; 
    public TextView text1; 
    public TextView text2; 
    public TextView text3; 
    public TextView text4; 
    } 

public View getView(int position, View convertView, ViewGroup parent) { 
     View vi=convertView; 
     ViewHolder holder; 
     if(convertView == null){ 
      vi = inflater.inflate(R.layout.item, null); 
      holder=new ViewHolder(); 
      holder.text1=(TextView)vi.findViewById(R.id.text1); 
      holder.text2=(TextView)vi.findViewById(R.id.text2); 
      holder.text3=(TextView)vi.findViewById(R.id.text3); 
      holder.text4=(TextView)vi.findViewById(R.id.text4);   
      holder.img1=(ImageView)vi.findViewById(R.id.img1); 
        holder.img2=(ImageView)vi.findViewById(R.id.img2); 
      vi.setTag(holder); 
     } else { 
      holder=(ViewHolder)vi.getTag(); 
     } 

      String shorten=shortenText(t4); 
    holder.text.setTag(shorten); 
    holder.text.setText(shorten); 

    if(t1){ 
     holder.text1.setTag(thisMsg.get(D_ENUM.T1)); 
     holder.innerName.setText(thisMsg.get(thisMsg.get(D_ENUM.T1)); 
    } 
    if(t2){ 
     holder.text1.setTag(thisMsg.get(D_ENUM.T2)); 
     holder.innerName.setText(thisMsg.get(thisMsg.get(D_ENUM.T2)); 
    } 
    if(thisMsg.containsKey(D_ENUM.T3)){ 
     String t3 = shortenText(thisMsg.get(D_ENUM.T3)); 
     holder.innerDesc.setTag(t3); 
     holder.innerDesc.setText(t3); 
    } 

    holder.img1.setTag(img1); 
    imageLoader.DisplayImage(img1, act, holder.img1); 

    if(img2 != null) { 
     holder.innerImage.setTag(img2); 
     holder.innerImage.setVisibility(View.VISIBLE); 
     imageLoader.DisplayImage(img2, act, holder.img2); 
    } else { 
     holder.innerImage.setTag(img2); 
     holder.innerImage.setVisibility(View.GONE); 
    } 

    return vi; 

답변

3

(겹 아래에있는 ... 다른 이전 위치에서 데이터를 얻을) 즉, 표시 할 항목이 없으면 빈 값으로 설정하는 것입니다.

전달 된보기 (convertView)와 연관된 ViewHolder (holder)가 이전에 getView 함수를 실행하여 채워진 것을 이해합니다. 그들은 기본값으로 새롭게 생성 된 객체가 아닙니다

+0

고마워요. 나는 지금 그것을 얻을 수있을 것 같은 느낌이 든다. ..... – hunterp

+0

당신이 대답 할 부분이 너무 많아서 고맙다. "아무 것도 표시하지 않으면 빈 값으로 설정한다고해도." 도와주세요. D – AlvaroSantisteban

관련 문제