2012-06-28 2 views
1

연락처 앱용 앱을 만들었습니다. 이미지를 위아래로 스크롤 할 때마다 두 개의 텍스트보기 및 이미지보기가있는 커옴 커서 어댑터에는 다른 목록 항목에서 반복되는 문제가 있습니다. 누구든지 이걸 도와 줄 수 있어요. 미리 감사드립니다.Android 사용자 정의 커서 어댑터

여기에 다음 코드를

@Override 
public void bindView(View view, Context context, Cursor cursor) { 
    if(view !=null){ 

     ViewHolder holder = initViewHolder(view); 

     holder.displayName.setText(getUserDisplayName(cursor.getString(userid))); 
     holder.groupId.setText(cursor.getString(group)); 

       holder.displayPhoto.setImageURI(imageUri); 

    } 

} 

private ViewHolder initViewHolder(View view) { 
    ViewHolder innerViewHolder = null; 
    if(innerViewHolder == null){ 
     innerViewHolder = new ViewHolder(); 
     innerViewHolder.displayName =(TextView) view.findViewById(R.id.name); 
     innerViewHolder.groupId = (TextView) view.findViewById(R.id.groupId); 
     innerViewHolder.displayPhoto = (ImageView) view.findViewById(R.id.photo); 
    } 
    return innerViewHolder; 
} 


class ViewHolder{ 
    TextView displayName; 
    TextView groupId; 
    ImageView displayPhoto; 
} 

@Override 
public View newView(Context context, Cursor cursor, ViewGroup parent) { 
    return inflater.inflate(R.layout.contact_list_item, null); 
} 
+0

사용자 정의 커서의 코드를 게시 할 모든 목록 항목에 대해 동일한 URI를 사용하는 현재 ... 너무 커서에서
그것을 얻을 수도 있습니다 어댑터. –

+1

이 질문을 참조하십시오 http://stackoverflow.com/questions/5183813/android-issue-with-newview-and-bindview-in-custom-simplecursoradapter – Nirali

+0

이 문제와 아무 상관이있다, 그러나 쓰기' ViewHolder innerViewHolder = null;'그리고 나서 if (innerViewHolder == null)'이 중복 됨 –

답변

2

있어 newView()과의 Bindview()의 샘플 구현입니다.

public View newView(Context context, Cursor cursor, ViewGroup parent) { 
    View view = inflater.inflate(R.layout.list_item_whatever, null); 
    ViewHolder holder = new ViewHolder(); 
    holder.displayName = (TextView) view.findViewById(R.id.name); 
    holder.groupId = (TextView) view.findViewById(R.id.groupId); 
    holder.displayPhoto = (ImageView) view.findViewById(R.id.photo); 
    view.setTag(holder); 
    return view; 
} 

@Override 
public void bindView(View view, Context context, Cursor cursor) { 
    ViewHolder holder = (ViewHolder) view.getTag(); 
    if (holder.displayName != null) { 
     holder.displayName.setText(getUserDisplayName(cursor.getString(userid))); 
    } 
    if (holder.groupId != null) { 
     holder.groupId.setText(cursor.getString(group)); 
    } 
    if (holder.displayPhoto != null) { 
     holder.displayPhoto.setImageURI(imageUri); 
    } 
} 

또한, imageUri을 위해, 당신은, 당신이

+0

감사합니다 모두 문제를 해결합니다. 그것의 간단한 해결책. 빈 ImageView를 기본 이미지로 설정해야합니다. 그래서 위아래로 스크롤 할 때마다 다른 이미지는 다른 행에서 반복되지 않습니다. 난 이미지는 사용자 인터페이스 부에서 이미지 캐시 있기 때문에 행을 반복하도록 생각하는 경우 (holder.displayPhoto = NULL!) { holder.displayPhoto.setImageURI (imageUri); } else {holder.displayPhoto.setImageURI (<기본 빈 이미지 넣기>)} – oczdref

+0

ListView는 뷰를 재사용하여 성능을 최적화합니다 ( –

+0

). 따라서 ImageView에 null 값이나 빈 값을 설정하면 안됩니다. 감사 – oczdref

관련 문제