2012-04-26 2 views
1

내 데이터의 시각적 측면을 변경하기 위해 Android 용 사용자 지정 ListView 어댑터를 작성했습니다. ListView를로드하면 원하는 항목의 모양이 변경됩니다. 보기를 스크롤하면 목록의 모든 항목의 모양이 수정 될 때까지 다른 항목이 무작위로 변경됩니다. 나는이 코드 유형에 대한 SO에 읽은에서특정 항목을 변경하는 사용자 지정 ListView 어댑터

, 나는 안드로이드 된 뷰를 재 - 사용하기 때문에
public View getView(int position, View convertView, ViewGroup parent)
position 필드가 반드시 내 데이터 구조에 매핑되지 않는 것을 알고있다. 이것은 내가 함께 일하는 데 어려움을 겪고있는 것처럼 보입니다.

빈센트는 제안으로 ViewHolder 패턴을 사용하여

업데이트의 getView 방법 :

@Override 
public View getView(int position, View convertView, ViewGroup parent) 
{ 
    View rowView = convertView; 
    if (rowView == null) 
    { 
     LayoutInflater inflater = LayoutInflater.from(context); 
     rowView = inflater.inflate(R.layout.rowlayout, null); 
     ViewHolder viewHolder = new ViewHolder(); 
     viewHolder.text = (TextView) rowView.findViewById(R.id.tv01); 
     rowView.setTag(viewHolder); 
    } 

    ViewHolder holder = (ViewHolder) rowView.getTag(); 
    String s = names[position]; 
    holder.text.setText(s); 
    if (s.startsWith("a")) 
    { 
     holder.text.setTextColor(0xff00ffff); 
    } 

    return rowView; 
} 

내가 런타임에 그들을 변화보다 더 나은 방법이있다, 그래서 만약 정적 수정해야 할 항목을, 또한 일 것이라고 ! 어떤 도움이라도 대단히 감사 할 것입니다. 감사합니다.

+0

당신이 tv01을 제외하고, rowView에서 아이 뷰가 있습니까? –

+0

ViewHolder의 코드를 게시하여 멤버 필드를 볼 수 있습니다. –

답변

0

당신의 레이아웃이 안드로이드에 의해 재사용되고 있습니다. 그래서 당신은이 출력을 얻고 있습니다. 당신이해야 할 일은 각각의 뷰에 대한 정적 뷰홀 역할을 할 클래스를 가지고 태그로 사용하는 것입니다. this (참조 용)

+0

빈센트, 링크 주셔서 감사합니다. – user1357575

+0

아 .. 내 편집 시간 초과 ... 빈센트, 고마워, 그 패턴을 시도하고 여전히 문제가 있습니다. 새 getView를 사용하여 내 게시물을 업데이트했습니다. – user1357575

0

기존보기를 수정하고 있지 않습니다. convertView가 null이 아니면 안드로이드는 뷰를 부 풀리지 않고 재활용하고 있지만 여전히 새로운 값으로 업데이트해야합니다. 이런 식으로 뭔가가 작동합니다 :

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

if(convertView == null) { 
    convertView = mInflater.inflate(R.layout.rowlayout, null); 
    holder = new ViewHolder(); 
} 
else { 
    holder = (ViewHolder) convertView.getTag(); 
} 
holder.title = (TextView) convertView.findViewById(R.id.tv01); 
convertView.setTag(holder); 

return convertView; 

}

관련 문제